tiles框架是一个很强大的框架,能够方便快捷的搭建各种模块化的web架构。比如包含菜单、banner、主体、footer的web架构。
一、在http://tiles.apache.org/ 下载Tiles 2.1.2(点击共享下载)
需要引入这几个jar: tiles-api-2.1.2.jar,tiles-core-2.1.2.jar,tiles-servlet-2.1.2.jar,tiles-jsp-2.1.2.jar
二、在WEB-INF中增加tiles-defs.xml文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
<definition name="sample.page" template="/jsp/layout/layout.jsp">
<put-attribute name="title" value="标题" />
<put-attribute name="header" value="/jsp/layout/header.jsp" />
<put-attribute name="menu" value="/jsp/layout/menu.jsp" />
<put-attribute name="footer" value="/jsp/layout/footer.jsp" />
</definition>
</tiles-definitions>
三、制作一个jsp模块,比如。注意在头部需要引入taglib
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<html>
<head>
<title><tiles:getAsString name="title"/></title>
</head>
<body>
<table>
<tr>
<td colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td>
<tiles:insertAttribute name="menu" />
</td>
<td>
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr>
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
</body>
</html>
四、在web.xml中:
增加context param:
<context-param>
<param-name>
org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
</param-name>
<param-value>
/WEB-INF/tiles-defs.xml
</param-value>
</context-param>
增加filter:
<filter>
<filter-name>tilesFilter</filter-name>
<filter-class>org.apache.tiles.web.util.TilesDecorationFilter</filter-class>
<init-param>
<param-name>definition</param-name>
<param-value>sample.page</param-value>
</init-param>
<init-param>
<param-name>attribute-name</param-name>
<param-value>body</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>tilesFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
增加listener:
<listener>
<listener-class>org.apache.tiles.web.startup.TilesListener</listener-class>
</listener>
因为tiles是struts的一部他,所以这样可以得用struts的跳转(forward)来改变body定义的页面。如果某个页面forward时不想经过tiles处理,可以在forward之前加一个
req.setAttribute ("org.apache.tiles.decoration.PREVENT:"+definitionName, Boolean.TRUE);
其中definitionName就是filter init-param中的definition
另外一种配置不需要使用filter
在Action中返回view的时候,使用格式:
tiles:def-name:attr-name=jsp-name
其中def-name是tiles定义的definition name, attr-name是要插入的jsp对应的attr, jsp-name是要插入的jsp
比如: "tiles:main.page:body=userList.jsp"