随笔 - 170  文章 - 536  trackbacks - 0
<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

我参与的团队

随笔分类(103)

搜索

  •  

积分与排名

  • 积分 - 412372
  • 排名 - 135

最新评论

阅读排行榜

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

posted on 2006-02-08 17:26 steady 阅读(2975) 评论(3)  编辑  收藏 所属分类: JSF & Myfaces

FeedBack:
# re: JSF中使用Struts Tiles和Standalone Tiles 2006-04-12 16:16 gllord
我按照你说的去做,怎么汉字输入还是显示乱码,能帮帮我吗?  回复  更多评论
  
# re: JSF中使用Struts Tiles和Standalone Tiles 2006-04-12 16:19 steady
这个问题可以参考我的另外一篇关于国际化的文章。  回复  更多评论
  
# re: JSF中使用Struts Tiles和Standalone Tiles[未登录] 2007-08-29 19:11 JOE
小弟在读CORE jsf 2nd第八章卡住了,下的原代码儿凡是跟tiles有关的在netbean 6.0 m10的环境下都运行不了(glassfishV2,最新的),说什么404错误,找不到资源还有服务,怎么办呀,去官网的FAQ看,居然连FAQ都没出来,怎么解决?谢谢。book-viewer-tile这个例子是最开始的,tiles-core-SNAPSHOT其提供的唯一的jar文件。源代码就是从官网下的,真晕呀。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: