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后面。
<servlet>
<servlet-name>TilesServet</servlet-name>
<servlet-class>org.apache.struts.Tiles.TilesServlet</servlet-class>
<init-param>
<param-name>definitions-config</param-name>
<param-value>/WEB-INF/config/tiles-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
接下来,我们要在上面这段配置定义的文件“/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没有什么区别呢?
<%@ page session=”false” contentType=”text/html;charset=utf-8″%>
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %>
<%@ taglib uri=”http://jakarta.apache.org/tiles” prefix=”tiles” %>
<html>
<head>
<title><tiles:getAsString name=”title”/></title>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″/>
<link href=”../css/site.css” rel=”stylesheet”/>
</head>
<body>
<f:view locale=”zh”>
<tiles:insert attribute=”page” flush=”false”/>
</f:view>
<body>
</html>
注意:上面这个页面使用了<f:view>,所以在子页面中就不要再加入<f:view>了,否则会造成冲突无法正常使用。
在struts中,我们是可以在struts-config.xml中直接使用Tiles的name来直接调用Tiles,但在JSF中使用Tiles就不能这样,JSF配置文件中的navigation只能定义到所要的页面,而不是某个Tiles,这样的话我们就需要两个不同的jsp文件来处理这样的导航。
借用我的MyPSP项目中的一段代码作为示例:
首先我定义了一个标准的文件头模板single_layout.jsp,也就是上面给的例子,把这个作为模板定义在tiles-config.xml中。
<definition name=”mypsp.single” path=”/tiles/single_layout.jsp”>
<put name=”title” value=”${title}”/>
<put name=”page” value=”${page}”/>
</definition>
接着我们制作了一个具体的页面文件/pages/activity.jsp。
随后我们要对一个具体的页面activity.jsp使用Tiles进行拼装,在tiles-config.xml中进行配置。
<definition name=”mypsp.activity” extends=”mypsp.single”>
<put name=”title” type=”string” value=”Activity”/>
<put name=”page” value=”../pages/activity.jsp”/>
</definition>
最后需要一个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” %>
这样就可以了。
要说点啥就在这吧