JSF中使用Tiles

来源:互联网 发布:怎样找淘宝客 编辑:程序博客网 时间:2024/05/01 09:52
主要有两种方法。一种是使用myfaces中的JspTilesViewHandlerImpl,另一种方法是用struts1.1中的TilesServlet。
 
方法一:使用myfaces中的spTilesViewHandlerImpl。例程参见MyFaces的tiles例子
 
1.在web.xml中加一个参数定义,用于指定tiles定义文件
<context-param>
     <param-name>tiles-definitions</param-name>
     <param-value>/WEB-INF/config/tiles-defs.xml</param-value>
</context-param>
 
2.在JSF的配置文件中加一个view-handle,使JSF能处理tiles的定义
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
 
<faces-config>
<application>
    <view-handler>org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl</view-handler>
 <message-bundle>resource</message-bundle>
 <locale-config>
  <default-locale>zh</default-locale>
 </locale-config>
</application>
 
</faces-config>
 
 
3.定义tiles的定义文件和模板等,这与Struts中完全一样。
tiles-defs.xml的内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
      
<tiles-definitions>
 <definition name="/test.tiles" path="/tiles/layout.jsp">
        <put name="title" type="string" value="welcome"/>
        <put name="page" value="/test.jsp"/>
 </definition> 
</tiles-definitions>
 
 
layout.jsp的内容如下:
<%@ page session="false" contentType="text/html;charset=utf-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/tld/struts-tiles.tld" prefix="tiles" %>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title><tiles:getAsString name="title"/></title>
</head>
<body>
<f:view>
 下面是Tile插入的内容:<br/>
    <f:subview id="page">
        <tiles:insert attribute="page" flush="false"/>
    </f:subview>
</f:view>
</body>
</html>
 
test.jsp的内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
  <h:outputText value="这是一个简单的Tile示例!"/>
 </body>
</html>
 
4.调用方法
直接用http://localhost:8080/test.jsf就可以了。标红色部分依你所用的配置可能有些不同。
 
注意以下问题
1.<tiles:insert>标签中的属性 flush="false"
2.<definition>中属性 name="/test.tiles" 与test.jsp相一致,这样请求/test.jsf时,会自动应用test.tiles这个tiles定义。
3.无论怎么用tiles插入片断,必须保证f:view只能有一个,并在最顶层。
4.在bea workshop中编辑每一个片断时,为了不出现乱码必须有以下内容。
<html>
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
 
5.要想在bea workshop中使用可视的编辑器编辑tiles定义文件tiles-defs.xml,必须在web.xml中配置struts,在struts配置文件中配置tiles插件。具体方法请参见bea workshop生成的struts项目。
 
方法二,使用tilesServlet(在struts1.1中有,在Struts1.2中没有)
1.在web.xml中配置tilesServlet,指定tiles的配置文件tiles-def.xml文件
<servlet>
  <servlet-name>tileServlet</servlet-name>
  <servlet-class>org.apache.struts.tiles.TilesServlet</servlet-class>
  <load-on-startup>3</load-on-startup>
  <init-param>
   <param-name>definitions-config</param-name>
   <param-value>/WEB-INF/config/tiles-defs.xml</param-value>
  </init-param>
 </servlet>
2.定义tiles的定义文件和模板等,这与Struts中完全一样。(与方法一一样)
3.调用,不能像方法那样直接使用。
必须定义一个包装文件testTiles.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=utf-8" %>
<%@ taglib uri="/WEB-INF/tld/struts-tiles.tld" prefix="tiles" %>
<html>
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
  <tiles:insert definition="/test.tiles"/>
 </body>
</html>
在这个文件中调用tiles定义。
 
当然还可以用shale中的Tiles的支持,参见http://www.js66.com/java/read.php?tid=40&fpage=2