认识Tiles
来源:互联网 发布:网络风暴检测工具 编辑:程序博客网 时间:2024/06/14 09:06
最近在做东西,要求使用Tiles框架。就简单总结了一下。
一、什么是Tiles框架?
Tiles 是一种JSP布局框架,主要目的是为了将复杂的jsp页面作为一个的页面的部分机能,然后用来组合成一个最终表示用页面用的,这样的话,便于对页面的各个机能的变更及维护。
二、为什么使用Tiles框架
你可能觉得,Tiles跟jsp:include标签一样的作用。当然,Tiles实现了jsp:include的功能,但是我认为它比jsp:include更灵活。使用Tiles大大提高了视图层程序代码的可重用性、可扩展性和可维护性。但也增加了视图创建的难度,所以,建议Tiles应用于有一定规模的网页制作。
三、具体使用。
初步准备:由于本人使用的spring ,先在配置文件中定义如下:
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"> <property name="order" value="1"></property> </bean> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> <property name="definitions"> <list> <value>/layout/layout.xml</value> </list> </property> </bean>
value指定了接下来使用的layout.xml的位置。order设置了优先级(数字越小优先级越高),springmvc配置文件中有多个视图解析器,优先级高的视图解析器会优先调用。
(1) 对于一个超级简单的页面,会由三部分组成。header,body,footer。
而很多的页面公用header与footer,这时候,就可以将这两者摘出来,放在单独的jsp文件中,在body.jsp的地方引用这两者,这通过jsp:include可以实现。
那个Tiles框架又如何实现这种功能呢?
首先:需要创建一个layout.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> <definition name="layout" template="/jsp/mainLayout.jsp"> </definition> <definition name="myView" extends="layout">//这是使用的继承,也可以直接使用上面的template。 <put-attribute name="header" expression="/jsp/header.jsp" /> <put-attribute name="body" expression="/jsp/body.jsp"></put-attribute> <put-attribute name="footer" expression="/jsp/footer.jsp"/> </definition>
</tiles-definitions>
这里面定义的内容相当于定义了默认模板。它引用了footer.jsp,body.jsp与header.jsp.
具体的mainLayout.jsp,定义了基本的网页布局。注意,这些头不可少。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %><%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %><%@ taglib prefix="title" uri="http://tiles.apache.org/tags-tiles" %><div><tiles:insertAttribute name="header"></tiles:insertAttribute><tiles:insertAttribute name="body"></tiles:insertAttribute><title:insertAttribute name="footer"></title:insertAttribute></div>
这样,网页的显示就是header,body,footer组合在一起的内容了。
具体访问方式。
@RequestMapping("/test") public String test(Model model){ model.addAttribute("body","other"); return "myView"; }
访问的对象为定义的模板的名称。
2)如果其他的页面想使用mainLayout.jsp布局,比如在other.jsp,可以这样写。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %><%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %><%@ taglib prefix="title" uri="http://tiles.apache.org/tags-tiles" %><tiles:insertDefinition name="myView"> <tiles:putAttribute name="body"> others </tiles:putAttribute> </tiles:insertDefinition>其中,如果name对应的模板内的内容被重新修改,会覆盖原来的内容。如果不修改就会保持模板初始的内容。
访问:
@RequestMapping("/test") public String test(Model model){ model.addAttribute("body","other"); return "other"; }访问的是other.jsp,不再是模板的名称。
这样,访问的结果会有
header.jsp other.jsp footer.jsp组合在一起的内容
3)tiles的强大的地方,假设10w个页面使用同样的布局,如果按照jsp:include的形式,每个页面都需要引入(那得累死)。
但是通过tiles,可以简化这个操作。
首先,在layout.xml中如下定义
<definition name="myView" extends="layout"> <put-attribute name="header" expression="/jsp/header.jsp" /> <put-attribute name="body" expression="/jsp/${body}.jsp"></put-attribute> <put-attribute name="footer" expression="/jsp/footer.jsp"/> </definition>
注意,body的内容,这时候使用类似于el表达式的形式,
public String test(Model model){ model.addAttribute("body","other"); return "myView"; }
对应的后台的代码,其中body名称与layout.xml的body一致。添加名称为other,返回值为定义的模板的名称myView,这样,当访问的时候,body的内容就相当于访问的/jsp/other.jsp了。就算有10w+的页面,也不用每一个都写jsp:include了。
- 认识Tiles
- tiles
- tiles
- tiles
- Tiles
- Tiles框架
- struts tiles
- tiles用法
- Tiles配置
- Apache Tiles
- Tiles框架
- Tiles & SiteMesh
- spring tiles
- Tiles简介
- Tiles框架
- tiles准备
- tiles框架
- tiles 使用
- 字符串加标点HTML
- JZOJ5456. 【NOIP2017提高A组冲刺11.6】奇怪的队列
- oracle笔记07
- webpack与vue-cli
- hadoop Shuffer过程
- 认识Tiles
- 插入排序
- 《算法竞赛入门经典(大白书)》1.1 【待续】
- 阿里Java开发手册(自我总结版一)
- Material-Animations(三)--Animate view layout elements
- 神奇的闭包
- 爬取百度百科上有关妇产科的语料
- 机器学习基石-09-3-Generalization Issue
- 字符的左旋