Apache Tiles3整合SpringMvc

来源:互联网 发布:办公软件的运用 编辑:程序博客网 时间:2024/06/05 03:51

SpringMVC整合Tiles3,基于Maven构建,Bootstarp做前台页面呈现尽管做的相对简陋。菜单可以切换两种布局方式(用继承以及覆盖解释如何换汤不换药)

下面的项目实战我们也用到了通配符以简化定义,在普通的springMVC集成Tiles工程里通配符的使用可能类似下面这样:

<definition name="tiles/*" extends="base.definition">      <!-- {1}:通配符方式简化定义 -->      <put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/>  </definition>  
然而,当我们用springMVC整合Tiles时在springMVC配置文件中启用了complete-autoload导致通配符的使用方式需要做些改进(配置监听器的方式不会出现此问题):

<definition name="WILDCARD:tiles/*" extends="base.definition">      <!-- {1}:通配符方式简化定义 -->      <put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/>  </definition>

核心xml文件:

tiles.xml中:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE tiles-definitions PUBLIC   "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"   "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"><tiles-definitions><!-- 基本布局页面 --><!-- 如果还有尚未填充的Attribute,这被称作抽象定义(abstract definition),它可以被其他Definition继承以实现布局复用,或者也可以在运行时填充这些Attribute,是否填充是可选的。本例中layout.jsp页面中尚未填充的属性为<tiles:insertAttribute name="content" /> --><definition name="base.definition" template="/WEB-INF/views/layout/layout.jsp"><put-attribute name="nav" value="/WEB-INF/views/layout/nav.jsp" /><put-attribute name="title" value="All of the stars"/></definition><!-- =========================================== 定义的继承 ========================================================================== --><!-- Definition extension: a definition can inherit from another definition, to reuse an already made (abstract or not) definitionextends:类似Java的继承,抽象定义、继承、覆盖。(覆盖有两种形式:覆盖Template和覆盖Attribute)我们用了通配符简化定义,为什么在属性name前附加“WILDCARD:”前缀?因为例子启用了Tiles的高级特性以支持更复杂的通配符情形,如果不需要使用高级特性(详见springMVC配置文件completeAutoload)则默认情况下无需添加此前缀。详见http://tiles.apache.org/framework/tutorial/advanced/wildcard.html --><definition name="WILDCARD:tiles/*" extends="base.definition"><!-- {1}:通配符方式简化定义 --><put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/></definition><!-- 覆盖Template --><definition name="WILDCARD:tiles2/*" extends="base.definition" template="/WEB-INF/views/layout/layout2.jsp"><!-- 覆盖Attribute --><put-attribute name="nav" value="/WEB-INF/views/layout/nav2.jsp" /><put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/></definition><!-- ============================================================================================================================= --></tiles-definitions>

对tiles.xml文件进行分析:

其中:这是基本布局页面

<!-- 基本布局页面 -->
<!-- 
如果还有尚未填充的Attribute,这被称作抽象定义(abstract definition),它可以被其他Definition继承以实现布局复用,或者也可以在运行时填充这些Attribute,是否填充是可选的。
本例中layout.jsp页面中尚未填充的属性为<tiles:insertAttribute name="content" />
-->
<definition name="base.definition" template="/WEB-INF/views/layout/layout.jsp">
<put-attribute name="nav" value="/WEB-INF/views/layout/nav.jsp" />
<put-attribute name="title" value="All of the stars"/>
</definition>

下面就是定义的继承(根据相对应的方法的返回值,来改变的)

<definition name="WILDCARD:tiles/*" extends="base.definition">
<!-- {1}:通配符方式简化定义 -->
<put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/>
</definition>

<!-- 覆盖Template -->
<definition name="WILDCARD:tiles2/*" extends="base.definition" template="/WEB-INF/views/layout/layout2.jsp">
<!-- 覆盖Attribute -->
<put-attribute name="nav" value="/WEB-INF/views/layout/nav2.jsp" />
<put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/>
</definition>

在web.xml中:

<!--  welcome-file-list是一个配置在web.xml中的一个欢迎页,用于当用户在url中输入工程名称或者输入web容器url(如http://localhost:8080/)时直接跳转的页面或要执行的方法. --><welcome-file-list><welcome-file>better/p/home</welcome-file></welcome-file-list>

代码下载:代码下载


参考:http://blog.csdn.net/cocoa_cactus/article/details/50885932