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

Apache Tiles 3 頁面模板框架整合 Spring MVC 實戰指南

     編輯:Java 綜合教學

Maven 依賴

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.5</version>
</dependency>

Spring MVC 配置

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
    <property name="order" value="1" />
</bean>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>classpath:layout.xml</value>
        </list>
    </property>
</bean>

<!-- JSP 兜底解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
    <property name="order" value="2" />
</bean>

Tiles 定義文件 layout.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
    "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
    "https://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>
    <!-- 基礎佈局定義 -->
    <definition name="base_admin">
        <put-attribute name="admin_head" value="/WEB-INF/pages/common/template/admin/adminHead.jsp"/>
        <put-attribute name="admin_left" value="/WEB-INF/pages/common/template/admin/adminLeft.jsp"/>
    </definition>

    <!-- 具體頁面繼承基礎佈局 -->
    <definition name="index" template="/WEB-INF/pages/index.jsp" extends="base_admin">
        <put-attribute name="flag" type="string" value="1"/>
    </definition>
</tiles-definitions>

JSP 頁面使用 Tiles 標籤

<%@ taglib prefix="tiles" uri="https://tiles.apache.org/tags-tiles" %>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
    <title>首頁</title>
    ${css_main}${css_bootstrap}${js_jquery}
    <script src="/resources/module/admin/index.js"></script>
</head>
<body>
    <div class="container">
        <div class="row">
            <tiles:insertAttribute name="admin_head"/>
        </div>
        <div class="row">
            <tiles:insertAttribute name="admin_left"/>
            <div class="col-xs-10">
                <input type="hidden" value="<tiles:getAsString name='flag'/>" id="leftv"/>
                <table class="table table-hover table-striped table-bordered">
                    <tr><th>用戶名</th><th>創建時間</th><th>操作</th></tr>
                    <c:forEach var="u" items="${listUser}">
                        <tr>
                            <td>${u.userName}</td>
                            <td>${u.createDate}</td>
                            <td>333</td>
                        </tr>
                    </c:forEach>
                </table>
            </div>
        </div>
    </div>
</body>
</html>

核心標籤說明

  • <tiles:insertAttribute name="xxx"/>:插入定義的屬性片段
  • <tiles:getAsString name="xxx"/>:獲取屬性字符串值
  • definition name 對應 Controller 返回的視圖名

使用心得與遷移建議

Tiles 強制要求返回完整模板視圖再進行片段組裝,EL 表達式使用受限,靈活性不如 SiteMesh(基於過濾器的裝飾器模式)。項目後期已遷移至 SiteMesh,體驗更佳。

遷移關鍵差異

特性Apache TilesSiteMesh
實現機制視圖解析器 + 標籤庫Servlet Filter + 裝飾器
頁面耦合度高(需引入 Tiles 標籤)低(純 HTML/JSP,無侵入)
佈局復用繼承體系裝飾器模式
動態組裝較繁瑣靈活(可攔截任意響應)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved