Tiles是Struts中提供的一个优秀的模板技术,在JSF中,默认并没有提供这样的模板技术,但是,我们可以很容易的集成Struts中提供的Tiles到JSF中,现在,Tiles从Struts中独立出来了,我们也可以在JSF中使用Shale中提供的Standalone Tiles。 首先以集成Struts中的Tiles为例,简单概述一下步骤,最后我们在这个步骤上做一些小小的修改就可以继续整合Standalone Tiles了。
使用Struts中的Tiles,我们必须使用 Struts 1.1 的 jar 包,后面的新版本都是不可以使用的,如果没有的话可以上Struts的官方网站http://struts.apache.org下载一个。
我们需要在web.xml中做一些配置,加入TilesServlet,通常我们把这段配置放在FacesServlet后面。
接下来,我们要在上面这段配置定义的文件“/WEB-INF/config/tiles-config.xml”中配置 Tiles,这里的配置格式是和Struts中的配置格式是完全一样的,就不再重复了,大家可以参考官方的参考:http://struts.apache.org/struts-tiles/index.html,在我的MyPSP项目里也使用了Tiles,大家可以参考一下我的配置。
在使用Tiles标签的页面中加入标签声明就可以使用了:<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>,以MyPSP中一个简单的页面作为例子,是不是和在struts中使用Tiles没有什么区别呢?
注意:上面这个页面使用了<f:view>,所以在子页面中就不要再加入<f:view>了,否则会造成冲突无法正常使用。
在struts中,我们是可以在struts-config.xml中直接使用Tiles的name来直接调用Tiles,但在JSF中使用Tiles就不能这样,JSF配置文件中的navigation只能定义到所要的页面,而不是某个Tiles,这样的话我们就需要两个不同的jsp文件来处理这样的导航。
借用我的MyPSP项目中的一段代码作为示例: 首先我定义了一个标准的文件头模板single_layout.jsp,也就是上面给的例子,把这个作为模板定义在tiles-config.xml中。
接着我们制作了一个具体的页面文件/pages/activity.jsp。
随后我们要对一个具体的页面activity.jsp使用Tiles进行拼装,在tiles-config.xml中进行配置。
最后需要一个jsp文件/web/activity.jsp,在其中我们通过<tiles:insert definition="mypsp.activity" flush="false"/>来引用这个definition。
我们在访问的时候访问/web/activity.jsp这个页面就可以了,还挺简单的吧。
我们再提一下如何使用Shale中的Standalone Tiles,我们只需要改两个地方就可以了。 1.web.xml中 将:<servlet-class>org.apache.struts.Tiles.TilesServlet</servlet-class> 改成:<servlet-class>org.apache.tiles.servlets.TilesServlet</servlet-class> 这样就可以了。
2.标签声明 将:<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %> 改成:<%@ taglib uri="http://jakarta.apache.org/tiles" prefix="tiles" %> 这样就可以了。