Struts中Tilts标记的使用

来源:互联网 发布:网络同步的网络云盘 编辑:程序博客网 时间:2024/05/02 01:57

struts中有很多好用的标记,如logic,html,bean。。
不过有一个标记用得很少,struts-tiles.tld标记
Tiles框架特性和内容

Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。它允许先创建模板,然后在运行时动态地将内容插入到模板中。Tiles框架建立在JSP的include指令的基础上,但它提供了比JSP的 include指令更强大的功能。Tiles框架具有如下特性:
    ·创建可重用的模板
    ·动态构建和装载页面
    ·定义可重用的Tiles组件
    ·支持国际化

    Tiles框架包含以下内容:
    ·Tiles标签库
    ·Tiles组件的配置文件
    ·TilesPlugIn插件

    采用Tiles:Insert标签创建复合式网页

    Tiles标签库的tiles:insert标签和JSP include指令具有相同的功能,也能把其他的JSP页面插入到当前页面中。用tiles:insert标签取代JSP include指令来创建复合式页面,代码仅有稍微的差别,两者的利弊也很相似。单纯使用tiles:insert标签来创建复合式页面,还没有充分发挥Tiles框架的优势。
以下两条语句的作用是相同的:
<jsp:include page="test.jsp"/>
<tiles:insert page="test.jsp"/>

    采用Tiles模板创建复合式网页

 

(1)XML 配置:定义一个 tiles-defs.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://struts.apache.org/dtds/tiles-config_1_1.dtd"
>
       
       
<tiles-definitions>
       
<definition name="lanzhengwu.mainlayout"  path="/jsp/templete.jsp">
       
<put name="title" value="WEB企业人事管理系统"></put>
       
<put name="header" value="/jsp/head.jsp"></put>
       
<put name="left" value="/jsp/left.jsp"></put>
       
<put name="main" value="/jsp/main.jsp"></put>
       
<put name="footer" value="/jsp/tail.html"></put>
       
</definition>
       
        
<definition name="lanzhengwu.indexlayout" extends="lanzhengwu.mainlayout">
       
<put name="title" value="WEB企业人事管理系统"></put>
       
<put name="main" value="/jsp/main.jsp"></put>  
       
</definition>
       
        
<definition name="lanzhengwu.allreslayout" extends="lanzhengwu.mainlayout">
       
<put name="title" value="WEB企业人事管理系统>>所有资源"></put>
       
<put name="main" value="/jsp/allresinfo.jsp"></put>  
       
</definition>
       
        
<definition name="lanzhengwu.respublayout" extends="lanzhengwu.mainlayout">
       
<put name="title" value="WEB企业人事管理系统>>资源发布"></put>
       
<put name="main" value="/jsp/respub.jsp"></put>  
       
</definition>
       
        
<definition name="lanzhengwu.resourceinfolayout" extends="lanzhengwu.mainlayout">
       
<put name="title" value="WEB企业人事管理系统>>资源信息"></put>
       
<put name="main" value="/jsp/resourceinfo.jsp"></put>  
       
</definition>
       
       
</tiles-definitions>

  definition元素的name属性指定Tiles组件的名字,组件的name属性是唯一的,extends属性为继承指定的模版,如java类的继承,子类拥有父类的所有属性,如上面的lanzhengwu.indexlayout就会拥有lanzhengwu.mainlayout的样式,他也有像JAVA类中的重写方法,重写的话就会覆盖父类,
,path属性指定Tiles组件使用的模板,definition元素的put子元素用于向模板中插入具体的网页内容。
用path指定一个模版页面:
------------------------------------------------------------------------------------------

 

2///*******/jsp/templete.jsp页面*********/
<%@ page contentType="text/html;charset=gbk"%>
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
    
<base href="<%=basePath%>">
    
    
<title><tiles:getAsString name="title"/></title>/*从XML页面取得定义的标题*/
  
</head>
<tiles:insert attribute="header"></tiles:insert>/*从XML页面取得定义的头文件*/
  
<body>
   
<table align=center>
  
<tr>
    
<th align="left" valign="top"><tiles:insert attribute="left"></tiles:insert></th>
    
/*********/*从XML页面取得定义的左页面*/****/
    
<th align="center" valign="top"><tiles:insert attribute="main"></tiles:insert></th>
/*****************************/*从XML页面取得定义的主页面*/********/
  
</tr>
</table>
  
</body>
  
</html>
<tiles:insert attribute="footer"></tiles:insert>
/*******************/*从XML页面取得定义的尾页面*/***********/

 ------------------------------------------------------------------------
(3)在Strut配置文件中配置TilesPlugin插件,代码如下:
 <plug-in className="org.apache.struts.tiles.TilesPlugin" >
<set-property property="definitions-config"  value="/WEB-INF/tiles-defs.xml" />
 <set-property property="definitions-parser-validate" value="true" />
<!-- 
    ·definitions-config参数:指定Tiles组件的配置文件,如果有多个配置文件,则它们之间用逗号分隔。
    ·definitions-parser-validate参数:指定XML解析器是否验证Tiles配置文件,可选值包括true和false,默认值为true。
-->
</plug-in>
-------------------------------------------------------------------
像上面那样的用的<tiles:insert attribute="left"></tiles:insert>来导入页面,在XML中定义
模版的话,就可以直接导入模版来作为一个页面,如下面这样:
 <tiles:insert definition="lanzhengwu.allreslayout"></tiles:insert>
就会以‘/jsp/allresinfo.jsp‘替换主页面,用"WEB企业人事管理系统>>所有资源"来替换标题.
如下面这个页面:
-------------------------------------------------------------------

 

-------------------------------------------------------------------
<%@ page contentType="text/html;charset=gbk"%>
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>

  
</head>
 
    
<%String act=request.getParameter("act");
    
if("res".equals(act)){
     
%>
    
<tiles:insert definition="lanzhengwu.allreslayout"></tiles:insert>
    
<%}
else if("respub".equals(act))%>
    
<tiles:insert definition="lanzhengwu.respublayout"></tiles:insert>
    
<%}
 %>

</html>
采用Tiles模板机制,大大提高了代码的可重用性和可维护性,模板中包含了网页共同的布局。如果布局发生变化,只需要修改模板文件,无需修改具体的网页文件。