首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 1.x 系列教程(23):Tiles 模板佈局實戰與定義檔重用

     編輯:Java 相關知識

前言

Tiles 框架透過「模板+佔位符」機制,將頁面版面與內容分離。模板頁面使用 <tiles:getAsString>(字串佔位)與 <tiles:insert>(資源佔位)標籤,使用頁面再以 <tiles:put> 注入實際值。進階用法可建立 XML 定義檔集中管理重複屬性,並支援定義繼承。

基礎模板範例

1. 模板頁面 layout.jsp

<%@ taglib uri="https://struts.apache.org/tags-tiles" prefix="tiles" %>
<html>
<head><title><tiles:getAsString name="title" /></title></head>
<body>
<table border="<tiles:getAsString name="border" />">
    <tr><td><tiles:insert attribute="header" /></td></tr>
    <tr><td><tiles:insert attribute="body" /></td></tr>
    <tr><td><tiles:insert attribute="footer" /></td></tr>
</table>
</body></html>

五個佔位符:title、border(字串)、header、body、footer(資源)。

2. 內容頁面片段

// header.jsp
這是一個頁頭

// body.jsp
這是一個頁體

// footer.jsp
這是一個頁尾

3. 使用模板 mypage.jsp

<%@ taglib uri="https://struts.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insert page="layout.jsp">
    <tiles:put name="title" value="我的頁面" />
    <tiles:put name="border" value="${param.border}" />
    <tiles:put name="header" value="header.jsp" />
    <tiles:put name="body" value="body.jsp" />
    <tiles:put name="footer" value="footer.jsp" />
</tiles:insert>
  • <tiles:insert page="..."> 引入模板。
  • <tiles:put> 依佔位符類型注入字串或資源路徑。
  • 測試網址:.../mypage.jsp?border=1 與 ?border=0。

字元編碼注意事項

<tiles:insert> 與 <jsp:include> 相同,被插入資源無法改變當前頁面編碼。即使模板頁已設定正確編碼,使用頁也必須用 page 指令重新宣告,否則中文會亂碼。

定義檔集中管理 tiles-defs.xml

安裝 Tiles 外掛(前置條件)

<plug-in className="org.apache.struts.tiles.TilesPlugin">
    <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
</plug-in>

定義檔結構

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE tiles-definitions PUBLIC
    "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
    "https://struts.apache.org/dtds/tiles-config_1_1.dtd">
<tiles-definitions>
    <definition name="myLayout" path="/layout.jsp">
        <put name="title" value="我的頁面" />
        <put name="header" value="header.jsp" />
        <put name="body" value="body.jsp" />
        <put name="footer" value="footer.jsp" />
    </definition>
</tiles-definitions>
  • 多個定義檔可用逗號分隔:value="/WEB-INF/A-defs.xml,/WEB-INF/B-defs.xml"。

使用定義 newpage.jsp

<tiles:insert definition="myLayout">
    <tiles:put name="border" value="${param.border}" />
</tiles:insert>

僅需覆寫會變動的屬性(border),其他沿用定義檔預設值,程式碼大幅簡化。

定義繼承:進一步復用

<definition name="myLayout.newLayout" extends="myLayout">
    <put name="title" value="新的頁面" />
</definition>
  • extends 指定父定義,名稱慣用「父名.子名」格式(點號無特殊含義)。
  • 子定義可覆寫任意屬性,未覆寫者自動繼承。

總結

Tiles 模板機制有效解決版面重複問題:模板頁面定義骨架 → 定義檔集中預設屬性 → 使用頁面僅注入差異內容 → 定義繼承支援多層次復用。此模式為後續 JSF Facelets、Thymeleaf 片段佈局等現代模板引擎奠定概念基礎。

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