主要有两种方法。一种是使用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>
<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">
<!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>
<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>
<!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>
<%@ 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>
<%@ 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>
<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文件
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>
<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" %>
<%@ 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>
<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