2

JSF中使用Struts Tiles和Standalone Tiles

    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” %>
      这样就可以了。

引用地址:http://www.steadyxp.com/archives/201.html

要说点啥就在这吧