Tiles3.x框架使用

    官网:http://tiles.apache.org/

    Tiles,瓷砖,就像Windows8的磁贴一样,多个瓷砖构成了整个UI页面。它是一个免费开源的模板框架,基于组合模式来简化UI界面的开发。对于复杂的网站来说,它可以简单优雅地结合MVC技术一起工作。

配置:

  1.引入相应的依赖文件

    在Maven中添加完整依赖:

        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-extras</artifactId>
            <version>${tiles.version}</version>
        </dependency>

    如果是Struts,由于其集成了Tiles可以直接启用。具体怎么启用就不关心了,Struts基本都被SpringMVC取代了。

    注意,Tiles3.X需要JDK6.0及以上,Servlet2.5及以上,JSP2.1及以上。

   2.配置Tiles

    在WEB-INF/spring-servlet.xml中进行配置:

    <!-- Tiles相关配置 -->
	<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	    <property name="definitions">
	        <list>
	            <value>classpath:tiles/tiles.xml</value>
	        </list>
	    </property>
        <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" />  
	</bean>
	<!-- Tiles视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
        <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>  
    </bean>  

  3.使用

    tiles.xml文件对页面进行定义并添加默认属性,不进行HTML布局,只是配置好逻辑名和逻辑页面包含关系。

<?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>  
    <definition name="baseTemplate">  
        <put-attribute name="title" value="" />  
        <put-attribute name="header" value="/tiles-template/header.jsp" />  
        <put-attribute name="navigator" value="/tiles-template/navigator.jsp" />  
        <put-attribute name="body" value="" />  
        <put-attribute name="footer" value="/tiles-template/footer.jsp" />  
    </definition>  
    <definition name="mainSimpleTemplate" template="/tiles-template/layoutSimple.jsp" extends="baseTemplate" ></definition>  
    <definition name="mainTemplate" template="/tiles-template/layout.jsp" extends="baseTemplate" ></definition> 
    <!-- User -->  
    <definition name="login" extends="mainSimpleTemplate">  
        <put-attribute name="title" value="登录" />  
        <put-attribute name="body" value="/jsp/user/login.jsp" />  
    </definition>  
</tiles-definitions>

    当然,并不是每个页面都需要definition定义,可以使用通配符,正则表达式,甚至jsp el、MVEL、OGNL等进行描述。

    layoutSimple.jsp文件才是真正的模板布局文件:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><tiles:insertAttribute name="title" ignore="true" /></title>
</head>
<body>
	<div id="body_ccontainer">
		<tiles:insertAttribute name="body" />
	</div>
	<tiles:insertAttribute name="footer" />
</body>

    模板布局中,可以不插入任何属性,但如果要insertAttribute,属性必须要已经定义好(像上面的body和footer属性),否则会出错。

    然后login.jsp只需要书写登录的元素即可。

 ----------------------------------------华丽的分割线----------------------------------------

那什么是属性(Attribute)呢?

  一个attribute就是模板中的空缺(或称占位符),需要你在应用中填充它,一个attribute可以是一下三种类型:

    string: 直接渲染的字符串。
    template: 一个模板。可以没有属性,如果有属性,必须要填充好,以便渲染页面。
    definition: 可重用的组合页面。其全部或部分属性已经填充好。

那什么是定义(Definition)呢?

  一个definition就是展现给最终用户的构图,本质上就是模板其全部或部分填充好的属性的组合。

  如果该定义的属性已经完全填充好,就可以直接渲染页面了。如果有些属性没填充,它可以作为抽象定义以供其它定义继承重写,或者没填充的定义将在运行时填充。

视图准备者(View Preparers)

  有时候一个definition在渲染之前需要“预处理”。例如,显示一个menu时,menu的结构必须在request范围内进行创建和存储。

  为了达到“预处理 ”,View Preparers将在渲染definition之前被调用,因此所有需要正确渲染definition的东西都将被准备。

  创建View Preparers:只需要实现ViewPreparer接口即可,也可以继承ViewPreparerSupport类以免ViewPreparer接口改变出现编译问题。其中的execute方法将在渲染definition之前执行。

  为definition关联View Preparers:只需为definition元素的preparer属性指定类的完整路径名即可。如:

<definition name="preparer.definition" preparer="org.apache.tiles.test.preparer.TestViewPreparer">
  <put-attribute name="foo" value="/bar/foo.jsp" />
</definition>



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值