在大多数项目中,很多web开发人员能做的就是利用IDE自动为我们生成配置文件,但真正当我们自己想动手写个项目时,发现很多模块我们似懂非懂,无法入手。当然要学会这些项目中的每个模块以及如何集成它们,这还是需要平时的点滴的积累。
经常我们利用基于eclipse开发IDE来创建我们的页面,但实质上它在后台自动帮我们生成多很多配置文件,如spring,bb,tiles。
现在介绍的就如何复用我们的模版tiles.
它的方式很多种,多到每个语言都有各自的配置方式,但是万变不离其中,那就是复用一些常用的模版。
一.最原始的就是jsp:include方式:
<TABLE border="0">
<TBODY>
<TR>
<TD colspan="2">
<jsp:include page="/header.jsp" />
</TD>
</TR>
<TR>
<TD colspan="2">
<jsp:include page="/body.jsp" />
</TD>
</TR>
<TR>
<TD colspan="2">
<jsp:include page="/footer.jsp" />
</TD>
</TR>
</TBODY>
</TABLE>
这是个简单的利用标签来复用
二.利用struts-tiles.tld
<TABLE border="0">
<TBODY>
<TR>
<TD colspan="2">
<tiles:insert page="/header.jsp" flush="true" />
</TD>
</TR>
<TR>
<TD colspan="2">
<tiles:insert page="/body.jsp" flush="true" />
</TD>
</TR>
<TR>
<TD colspan="2">
<tiles:insert page="/footer.jsp" flush="true" />
</TD>
</TR>
</TBODY>
</TABLE>
这个标签是在基于 struts上的tld,所以你必须加入如下两个文件
1.struts-tiles.tld
2.struts.jar 包
3.struts-tiles.tld与JSF的集成
这种方式是比较常用的,它可以把相关页面利用tiles.xml集成起来,甚至利用模版和常用文件,你都可以不用新建你的JSP文件。下面就来感受一下它的妙处吧:
3.1首先是快速搞个jsf+spring+hibernate的工程(没有的可以参照这里
http://lygle.iteye.com/admin/blogs/616800),然后建立三个JSP文件
head.jsp
body.jsp
footer.jsp
再建立个模版文件
layout.jsp
<f:view>
<table width="778" border="1" align="center" cellpadding="0"
cellspacing="0">
<tr>
<td>
<f:subview id="header">
<t:insert attribute="header" flush="false"></t:insert>
</f:subview>
</td>
</tr>
<tr>
<td>
<f:subview id="body">
<t:insert attribute="body" flush="false"></t:insert>
</f:subview>
</td>
</tr>
<tr>
<td>
<f:subview id="footer">
<t:insert attribute="footer" flush="false"></t:insert>
</f:subview>
</td>
</tr>
</table>
</f:view>
使它包含着上面的三个文件
3.2修改JSF配置文件
在配置文件加个导航规则
<navigation-case>
<from-action>#{UserLoginBB.userLogin}</from-action>
<from-outcome>ok</from-outcome>
<to-view-id>/homePage.jsf</to-view-id>
</navigation-case>
这个规则假设是我们登录的动作,如果成功返回ok,然后跳转到"homePage.jsf"
注意这里的homePage.jsf事实上不存在的,它是利用tiles动态配置出来的一个页面。怎么配呢,继续往下看吧。
3.3配置web.xml跟tiles.xml
确保web.xml里有引用到我们的tiles.xml
如:
<context-param>
<param-name>tiles-definitions</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
关键的tiles.xml
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config.dtd">
<tiles-definitions>
<definition name="layout" path="/layout.jsp">
<put name="header" value="/header.jsp" />
<put name="body" value="/body.jsp" />
<put name="footer" value="/footer.jsp" />
</definition>
<definition name="layout2" path="/layout.jsp">
<put name="footer" value="/header.jsp" />
<put name="body" value="/body.jsp" />
<put name="header" value="/footer.jsp" />
</definition>
<definition name="layout3" path="/layout.jsp">
<put name="header" value="/header.jsp" />
<put name="body" value="/body.jsp" />
<put name="footer" value="/footer.jsp" />
</definition>
<definition name="/homePage.tiles" extends="layout3">
</definition>
</tiles-definitions>
这个配置文件里,我配置一个name为homePage",并且它的模版继承自layout3
那么请问,当你跳转到"/homePage.jsf",这个不存在的文件,它怎么跟tiles.xml关系上呢。当你有这个疑问时,说明你可以继续往下看了。
3.4.配置ViewHandle
在faces-config.xml里配置一个请求监听,当我们请求/homePage.jsf,它能够监听到并把它转到
/homePage.tiles从而调用layout3模版里的页面。
这个过程我们就引用apache里的一个文件,稍作修改,最重要的就是renderView接收请求,并把请求转为
/homePage.tiles这个过程
有兴趣的话,可以下来调试看下.
部分代码如下:
if (servletMapping.isExtensionMapping())
{
if (!viewId.endsWith(suffix))
{
int dot = viewId.lastIndexOf('.');
if (dot == -1)
{
//if (log.isTraceEnabled()) log.trace("Current viewId has no extension, appending default suffix " + suffix);
viewId = viewId + suffix;
}
else
{
//if (log.isTraceEnabled()) log.trace("Replacing extension of current viewId by suffix " + suffix);
viewId = viewId.substring(0, dot) + suffix;
}
facesContext.getViewRoot().setViewId(viewId);
}
}
else if (!viewId.endsWith(suffix))
{
// path-mapping used, but suffix is no default-suffix
dispatch(externalContext, viewToRender, viewId);
return;
}
String tilesId = viewId;
int idx = tilesId.lastIndexOf('.');
if (idx > 0)
{
tilesId = tilesId.substring(0, idx) + tilesExtension;
}
else
{
tilesId = tilesId + tilesExtension;
}
ServletRequest request = (ServletRequest)externalContext.getRequest();
ServletContext servletContext = (ServletContext)externalContext.getContext();
ComponentDefinition definition = null;
try
{
definition = getDefinitionsFactory().getDefinition(tilesId, request, servletContext);
if (definition == null)
{
/**
* Check for the definition without the leading '/' character. Allows user to specify Tiles definitions without a
* leading '/' char.
*/
int slashIndex = tilesId.indexOf("/");
if (slashIndex == 0)
{
tilesId = tilesId.substring(1);
definition = getDefinitionsFactory().getDefinition(tilesId, request, servletContext);
}
}
分享到:
相关推荐
【Struts2.0关系材料】这篇文档主要探讨了如何将Struts、Tiles和JavaServer Faces(JSF)这三个框架集成在一起,以构建强大的J2EE Web应用程序。Struts作为一款成熟的MVC框架,提供了良好的控制层支持;Tiles则通过...
8. **struts-faces**:如果项目中使用了JSF(JavaServer Faces),那么这个包就派上用场了。它提供了Struts和JSF之间的集成,使开发者可以利用JSF组件模型的优势,同时享受Struts的架构优势。 9. **struts-...
5. `struts-faces.jar`:如果需要将Struts与JavaServer Faces(JSF)结合使用,此jar包会提供必要的集成支持。 6. `commons-logging.jar`:Struts依赖于Apache Commons Logging进行日志记录,因此需要包含这个库。 ...
6. **struts-faces.jar**(如果需要使用JSF与Struts集成):这个包允许Struts与JavaServer Faces(JSF)框架结合使用。 7. **struts-taglib.jar**:包含了自定义标签库,如xhtml、nested、Tiles标签等。 8. **...
JavaServer Faces (JSF) 是一个用于构建用户界面的Java框架,主要应用于Web应用程序开发。JSF基于模型-视图-控制器(MVC)架构,提供了丰富的组件库和生命周期管理,使得开发者能够更加便捷地创建动态、数据驱动的...
Struts和JavaServer Faces(JSF)是两种广泛使用的Java Web开发框架,它们在构建企业级应用程序中扮演着重要角色。下面将详细讲解这两个框架的核心概念、特点以及它们在实际应用中的价值。 **Struts框架** Struts是...
5. **struts-faces**: 与JavaServer Faces(JSF)集成,提供了一种在Struts应用中使用JSF组件的方式。 6. **struts-scripting**: 支持使用Groovy、JavaScript等脚本语言编写Action。这为开发者提供了更多的选择,...
3. **struts-faces-x.x.x.jar**:这个JAR文件提供了对JSF(JavaServer Faces)的支持,使得Struts应用能够集成JSF组件。JSF是一种用于构建用户界面的MVC框架,与Struts的集成可以提升用户体验并简化开发工作。 4. *...
Struts1.2版本进一步提升了性能和稳定性,增加了对JavaServer Faces(JSF)的支持,以及对Spring框架的集成,使得开发者可以更方便地利用这些技术构建复杂的Web应用。书中可能还会涉及Struts与Hibernate、iBatis等...
Struts和JavaServer Faces(JSF)是两种广泛使用的Java Web开发框架,它们各自有着不同的设计哲学和功能特性。在本学习资料中,你将找到有关这两个框架的深入理解和实践应用的关键知识点。 **Struts框架** Struts是...
5. **Struts Faces**: `struts-faces-1.3.5.jar` 提供了与JSF(JavaServer Faces)的集成,允许开发者在Struts应用中使用JSF组件。JSF是一种用于构建用户界面的MVC框架,它与Struts的结合可以增强UI的开发能力。 6....
`struts-faces.jar`是Struts与JSF(JavaServer Faces)集成的库,如果你的应用同时使用了Struts和JSF,这个库将帮助你在两个框架间进行数据交换和事件处理。 `struts-el.jar`包含对EL(Expression Language)的支持...
【标题】"myjsf-tiles-richfacse"是一个基于JavaServer Faces (JSF)、Struts Tiles和RichFaces框架的综合项目,旨在提供一个功能丰富的、轻量级配置的应用程序环境。该项目融合了多种技术,以实现高效、灵活的页面...
9. **Faces**:Struts-Faces模块是Struts与JSF(JavaServer Faces)的集成,提供了一种在Struts应用中使用JSF组件的方式。 10. **Scripting**:Struts 1.3.10可能支持在JSP页面中使用脚本语言(如JavaScript或...
**JSF(JavaServer Faces)与Struts是两种在J2EE平台上广泛使用的MVC(Model-View-Controller)框架,用于构建企业级Web应用程序。它们都提供了组件化开发、事件处理和页面导航等特性,但各有其特点和优势。** ### ...
而Struts、JSF(JavaServer Faces)和WebWork2则是其他流行的MVC(Model-View-Controller)框架,它们各自有独特的特性和优势。这篇博客"Spring集成Struts、JSF、WebWork2"探讨了如何将这些框架与Spring进行整合,以...
5. **struts-faces**: 这是Struts与JavaServer Faces (JSF)集成的包,允许开发者利用JSF组件在Struts环境中工作。JSF是一种组件化的UI框架,它提供了丰富的UI组件和生命周期管理。 6. **struts-el**: 这个包支持在...
6. **struts-faces**: 如果包含,那么这是用于与JavaServer Faces (JSF) 框架集成的部分。 在开发Struts应用时,开发者通常会把这样的JAR文件放入项目的类路径中,然后按照Struts的约定配置XML文件,如struts-...
**JSF(JavaServer Faces)** 是Java平台上用于构建用户界面的一种组件模型,它简化了Web应用程序的开发,提供了一种声明式的方式来定义用户界面。JSF的核心是UI组件库,这些组件可以直接在HTML页面中使用,使得...
- **struts-core.jar**、**struts-el.jar**、**struts-faces.jar**等:特定功能的扩展库,如支持EL(Expression Language)和JSF(JavaServer Faces)。 使用Struts 1.3.8时,开发者需要配置web.xml和struts-config...