JSF中使用Tiles
主要有两种方法。一种是使用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项目。
?