这两天在给公司的新项目搭框架,在配tiles框架的时候发现一个小问题:
比如开发团队一共5人,每人10个页面,如果按照简单的tiles框架配置方法,每个<definition/>中都会产生很多重复的<put name="top" value="xxx.jsp"/>代码,导致tiles-defs.xml文件不段的膨胀.
仔细想了想tiles框架的原理,如果tiles支持嵌套功能的话,虽然tiles-defs.xml文件中的<definition/>个数没办法减少,但
每个<definition/>中的<put/>是完全可以精简的.
即需要改变哪个页面就只配置哪个页面;
查了一下struts的文档,虽然没找到tiles框架的嵌套功能,却找到了组合和扩展(我喜欢叫它继承),同样能解决问题!
下面我简单介绍一下它们各自的用法:(页面布局见下图)
一,Tiles组件的模板
这里我们需要设置两个layout模板,分别为parent_layout.jsp和child_layout.jsp
parent_layout.jsp
<!--child_layout.jsp -->
<body>
<div>
<!--右边主内容的tab区域-->
<tiles:insert attribute="tab" />
<!--右边主内容的content区域-->
<tiles:insert attribute="content" />
</div>
</body><!--parent_layout.jsp-->
<body>
<div>
<!--顶部菜单区域-->
<tiles:insert attribute="top" />
<!--左边竖导航-->
<tiles:insert attribute="left" />
<!--右边主内容区域-->
<tiles:insert attribute="child" />
<!--底步区域-->
<tiles:insert attribute="foot" />
</div>
</body>
child_layout.jsp
<!--child_layout.jsp-->
<body>
<div>
<!--右边主内容的tab区域-->
<tiles:insert attribute="tab" />
<!--右边主内容的content区域-->
<tiles:insert attribute="content" />
</div>
</body>
二,Tiles组件的组合
根据以上模板的定义,在tiles-defs.xml文件中就可以这样写来实现Tiles的组合了:
// 父级tiles模板配置
<definition name="parent"path="/parent_layout.jsp">
<put name="top" value="/top.jsp" />
<put name="left" value="/left.jsp" />
<put name="child" value="child" type="definition"/>
<put name="foot" value="/foot.jsp" />
</definition>
// 子级tiles配置
<definition name="child"path="/child_layout.jsp">
<put name="tab" value="/tab.jsp" />
<put name="content" value="/content.jsp" />
</definition>
三,Tiles组件的扩展(继承)
这里需要对以上的parent_layout模板做一些修改,并且不需要使用child_layout
修改后的parent_layout.jsp <!--parent_layout.jsp-->
<body>
<div>
<!--顶部区域-->
<tiles:insert attribute="top" />
<!--左边竖导航-->
<tiles:insert attribute="left" />
<!--右边主内容区域-->
<tiles:insert attribute="tab" />
<tiles:insert attribute="content" />
<!--底部区域-->
<tiles:insert attribute="foot" />
</div>
</body>
改完模板文件,下来该进行tiles的配置了;
// 父级tiles模板配置
<definition name="parent" path="/parent_layout.jsp">
<put name="top" value="/top.jsp" />
<put name="left" value="/left.jsp" />
<put name="tab" value="/tab.jsp" />
<put name="content" value="" />
<put name="foot" value="/foot.jsp" />
</definition>
// 子级tiles模板配置
<definition name="child" extends="parent">
<put name="content" value="/content.jsp" />
</definition>
如上所示,大家在开发中,每个页面只需要配置子级tiles的content.jsp就ok!
以上是小弟对tiles框架的组合和继承的简单应用,欢迎大家指点!