1) 在开发Web应用程序时,常常要求同一个站点的所有Web页面保持一致的外观。比如
---------------------------------
| | |
| | header |
| |-------------------------
| Menu | |
| | content |
| | |
| |------------------------
| | |
| | footer |
| | |
| | |
---------------------------------
2) 对同一个站点的所有页面,只有content部分的内容不同,如果采用基本的jsp语句来编 写所有web页面。显示会导致
大量的重复编码,增加开发和维护成本,我们完全可以把其中不变的部分定义为模板。以后只要使用模板就行了
3)struts中的tiles框架提供了这样一种模板页的实现方案
4)tiles具体实现步骤:
A:做一个模板页。该模板页包括头,左边,顶边 model.jsp。
注意:
整个表格:800*600
左边宽:20%
右边宽:80%,高80%
顶边高:10%
底边高:10%
B:去掉其中的<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">的标记
C:在model.jsp中待插入内容页的地方用<tiles:insert attribute="content"/>标记指定
待插入的内容,属性名为"content"
<tr>
<td width="80%" height="90%">***<tiles:insert attribute="content"/>****</td>
</tr>
D:创建一个内容页。注意一定要去掉其中的html标记与body标记。因为模板页中已经定义了html标记。
如果去掉了body标记不好排版。可以使用表格进行排版
一般命名为:XXXContent.jsp。比如:workerAddContent.jsp。
如果有样式则要取一个不同于其它的样式的别名
E:把内容页与模板页合在一起做成一个组件
1)在WEB-INF下面创建一个xml配置文件。取名为tiles-defs.xml
2)写在如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component-definitions PUBLIC "-//Apache Software
Foundation//DTD Tiles Configuration 1.1//EN" "tiles-config_1_1.dtd" >
<component-definitions> //定义多个definitions组件
<definition name="add-defin" path="/model.jsp"> //这是模板页
<put name="content" value="addContent.jsp"/>
//name的值一定要与模板页中定义的<tiles:insert attribute="content"/>一致
//value写上内容页
</definition>
.....
<definition name="XXX" path="/XXX.jsp"> 定义多个组件
<put name="XXX" value="XXX.jsp"/>
//name的值一定要与模板页中定义的<tiles:insert attribute="content"/>一致
//value写上内容页
</definition>
</component-definitions>
3)在struts-config.xml中配置
</plug-in>
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
//此处的名字一定要与前同创建的
//tiles-defs配置文件名一致
</plug-in>
4)在结果页中:
<%@ page contentType="text/html; charset=gb2312"
language="java" import="java.sql.*" errorPage="" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insert definition="add-defin" />
//此处的名字一定要与在tiles-defs中定义的组件name保持一致