首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Web 實現 HTML 模板繼承:FreeMarker/Velocity 整合 SpringMVC 方案

     編輯:程式設計疑難解答

需求背景

Spring + Hibernate 專案,原用 ThinkPHP 模板繼承(extend、block),現用 FreeMarker (.ftl) 僅支援宏,難以實現佈局復用與覆寫。

推薦方案:FreeMarker 原生支援繼承

FreeMarker 2.3.23+ 內建 <#extend>、<#block> 指令,完整支援模板繼承:

基礎佈局 layout.ftl

<!DOCTYPE html>
<html>
<head><title><@block name="title">預設標題</@block></title></head>
<body>
  <header>共用導航</header>
  <main><@block name="content"></@block></main>
  <footer>共用底部</footer>
</body>
</html>

子頁面 list.ftl

<#extend "layout.ftl">
<@block name="title">商品列表</@block>
<@block name="content">
  <table>...</table>
</@block>

SpringMVC 整合配置

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/views/" />
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="cache" value="false" />
    <property name="prefix" value="" />
    <property name="suffix" value=".ftl" />
</bean>

替代方案:Velocity / Thymeleaf

  • Velocity:#parse、#extend(需 VelocityTools),輕量但功能較弱。
  • Thymeleaf:th:fragment、th:replace、th:insert,Spring Boot 官方推薦,語法更自然,支援原型瀏覽。

避坑指南

  • FreeMarker 繼承要求父模板與子模板在同一 templateLoaderPath 下,或使用相對路徑。
  • <#block> 名稱唯一,子模板可選擇性覆寫。
  • 若專案已大量使用 .ftl 宏,可漸進式遷移:新頁面用繼承,舊頁面維持宏調用。

採用 FreeMarker 原生繼承或升級 Thymeleaf,即可獲得類 ThinkPHP 的模板繼承體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved