`
lygle
  • 浏览: 22998 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tiles,struts和 JavaServer Faces集成

阅读更多

     在大多数项目中,很多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关系材料

    【Struts2.0关系材料】这篇文档主要探讨了如何将Struts、Tiles和JavaServer Faces(JSF)这三个框架集成在一起,以构建强大的J2EE Web应用程序。Struts作为一款成熟的MVC框架,提供了良好的控制层支持;Tiles则通过...

    struts的九个必备常用包

    8. **struts-faces**:如果项目中使用了JSF(JavaServer Faces),那么这个包就派上用场了。它提供了Struts和JSF之间的集成,使开发者可以利用JSF组件模型的优势,同时享受Struts的架构优势。 9. **struts-...

    struts 的jar包

    5. `struts-faces.jar`:如果需要将Struts与JavaServer Faces(JSF)结合使用,此jar包会提供必要的集成支持。 6. `commons-logging.jar`:Struts依赖于Apache Commons Logging进行日志记录,因此需要包含这个库。 ...

    Tomcat5.5 for Struts几个jar包

    6. **struts-faces.jar**(如果需要使用JSF与Struts集成):这个包允许Struts与JavaServer Faces(JSF)框架结合使用。 7. **struts-taglib.jar**:包含了自定义标签库,如xhtml、nested、Tiles标签等。 8. **...

    jsf入门列子和jsf与Tiles结合

    JavaServer Faces (JSF) 是一个用于构建用户界面的Java框架,主要应用于Web应用程序开发。JSF基于模型-视图-控制器(MVC)架构,提供了丰富的组件库和生命周期管理,使得开发者能够更加便捷地创建动态、数据驱动的...

    Struts & JSF 教学ppt

    Struts和JavaServer Faces(JSF)是两种广泛使用的Java Web开发框架,它们在构建企业级应用程序中扮演着重要角色。下面将详细讲解这两个框架的核心概念、特点以及它们在实际应用中的价值。 **Struts框架** Struts是...

    struts 中所需要的包

    5. **struts-faces**: 与JavaServer Faces(JSF)集成,提供了一种在Struts应用中使用JSF组件的方式。 6. **struts-scripting**: 支持使用Groovy、JavaScript等脚本语言编写Action。这为开发者提供了更多的选择,...

    struts开发所用七个jar包

    3. **struts-faces-x.x.x.jar**:这个JAR文件提供了对JSF(JavaServer Faces)的支持,使得Struts应用能够集成JSF组件。JSF是一种用于构建用户界面的MVC框架,与Struts的集成可以提升用户体验并简化开发工作。 4. *...

    精通Struts:基于MVC的Java Web设计与开发 pdf

    Struts1.2版本进一步提升了性能和稳定性,增加了对JavaServer Faces(JSF)的支持,以及对Spring框架的集成,使得开发者可以更方便地利用这些技术构建复杂的Web应用。书中可能还会涉及Struts与Hibernate、iBatis等...

    Struts&JSF学习资料

    Struts和JavaServer Faces(JSF)是两种广泛使用的Java Web开发框架,它们各自有着不同的设计哲学和功能特性。在本学习资料中,你将找到有关这两个框架的深入理解和实践应用的关键知识点。 **Struts框架** Struts是...

    struts开发需要的包

    5. **Struts Faces**: `struts-faces-1.3.5.jar` 提供了与JSF(JavaServer Faces)的集成,允许开发者在Struts应用中使用JSF组件。JSF是一种用于构建用户界面的MVC框架,它与Struts的结合可以增强UI的开发能力。 6....

    struts 所需jar包

    `struts-faces.jar`是Struts与JSF(JavaServer Faces)集成的库,如果你的应用同时使用了Struts和JSF,这个库将帮助你在两个框架间进行数据交换和事件处理。 `struts-el.jar`包含对EL(Expression Language)的支持...

    myjsf-tiles-richfacse

    【标题】"myjsf-tiles-richfacse"是一个基于JavaServer Faces (JSF)、Struts Tiles和RichFaces框架的综合项目,旨在提供一个功能丰富的、轻量级配置的应用程序环境。该项目融合了多种技术,以实现高效、灵活的页面...

    Struts-1.3.10-src.zip

    9. **Faces**:Struts-Faces模块是Struts与JSF(JavaServer Faces)的集成,提供了一种在Struts应用中使用JSF组件的方式。 10. **Scripting**:Struts 1.3.10可能支持在JSP页面中使用脚本语言(如JavaScript或...

    jsf struts 学习ppt

    **JSF(JavaServer Faces)与Struts是两种在J2EE平台上广泛使用的MVC(Model-View-Controller)框架,用于构建企业级Web应用程序。它们都提供了组件化开发、事件处理和页面导航等特性,但各有其特点和优势。** ### ...

    Spring集成Struts、JSF、WebWork2

    而Struts、JSF(JavaServer Faces)和WebWork2则是其他流行的MVC(Model-View-Controller)框架,它们各自有独特的特性和优势。这篇博客"Spring集成Struts、JSF、WebWork2"探讨了如何将这些框架与Spring进行整合,以...

    Struts常用包

    5. **struts-faces**: 这是Struts与JavaServer Faces (JSF)集成的包,允许开发者利用JSF组件在Struts环境中工作。JSF是一种组件化的UI框架,它提供了丰富的UI组件和生命周期管理。 6. **struts-el**: 这个包支持在...

    struts开发标准包

    6. **struts-faces**: 如果包含,那么这是用于与JavaServer Faces (JSF) 框架集成的部分。 在开发Struts应用时,开发者通常会把这样的JAR文件放入项目的类路径中,然后按照Struts的约定配置XML文件,如struts-...

    SUN 官方推荐JSF Struts 例子

    **JSF(JavaServer Faces)** 是Java平台上用于构建用户界面的一种组件模型,它简化了Web应用程序的开发,提供了一种声明式的方式来定义用户界面。JSF的核心是UI组件库,这些组件可以直接在HTML页面中使用,使得...

    struts-1.3.8-all.zip

    - **struts-core.jar**、**struts-el.jar**、**struts-faces.jar**等:特定功能的扩展库,如支持EL(Expression Language)和JSF(JavaServer Faces)。 使用Struts 1.3.8时,开发者需要配置web.xml和struts-config...

Global site tag (gtag.js) - Google Analytics