Apache Tiles是一个JavaEE应用的页面布局框架。Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局。布局由可以复用的多个块组成,每个页面可以有选择性的重新定义块而达到组件的复用。
Tiles最先作为Apache Struts框架的一个组件,后来被独立为Apache的一个独立项目。 
 
本次整合的环境:
  IDE: IntelliJ IDEA 2017.2; Apache Maven;SSH;
目的:可复用前端页面构架.
 
目录结构: struts.xml为Struts2配置文件,位于src/main/resources/; layout.xml为Tiles配置文件,位于 webapp/WEB-INF/;(位置随意,只要与web.xml对应即可)

 
pom相关: 需要注意tiles的版本,如果是3.0+的,则需要struts2-tiles3-plugin-x.x.x.jar
  引入相关jar包:主要使用maven管理相关联jar包, 主要jar: struts2-core.jar; tiles-core.jar; tiles-api.jar; tiles-jap.jar; struts-tiles-plugin.jar.
...
<struts2.version>2.1.6</struts2.version>
<tiles.version>2.0.6</tiles.version>
<struts2-tiles-plugin>2.1.6</struts2-tiles-plugin>
<jetty.version>9.2.8.v20150217</jetty.version>
...
...
  <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
</dependency> <dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>${tiles.version}</version>
</dependency> <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-tiles-plugin</artifactId>
<version>${struts2-tiles-plugin}</version>
</dependency>
...

web.xml相关:

1 指定tiles的配置文件位置;

2 设置strutstiles的监听器.

  <context-param>
<param-name>org.apache.tiles.CONTAINER_FACTORY</param-name>
<param-value>
org.apache.struts2.tiles.StrutsTilesContainerFactory
</param-value>
</context-param>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
</param-name>
   <!-- 指定 tiles的配置文件位置,相对于webapp -->
<param-value>/WEB-INF/layout.xml</param-value>
</context-param> <listener>
<listener-class>
org.apache.struts2.tiles.StrutsTilesListener
</listener-class>
</listener> <filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Tips: <filter-mapping>中的<url-pattern> " /* "时表示拦截所有,包括jsp;" / "时拦截不包含.jsp的url参数;

struts.xml相关:

1 包继承自tiles-default时,设置结果类型为tiles型,其value是相关的框架definition的name属性值;

2 包继承自struts-default时,需要指定特殊的结果类型,将类型显示定义,定义后使用,使用规则与1相同.

  <package name="pk1" namespace="/struts" extends="struts-default">
<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
<action name="tiles" class="com.sknn.tiles.action.TilesAction" method="tile">
<result type="tiles" name="tilePage">struts-tiles</result>
</action>
</package> <!-- 或者另一种写法 ,注意extends的内容, struts-tiles是Tiles定义的一个模板的名称 -->
<!--
  <package name="pk2" extends="tiles-default">
<action name="tiles2" class="com.sknn.tiles.action.TilesAction" method="tile">
    <!-- 与tiles配置的definition标签中name属性相同! -->
<result type="tiles" name="tilePage">struts-tiles</result>
</action>
</package>
-->

tiles文件:

主要是<definition/>子标签配置,其结合框架主体页面上的<tiles:setxxxxxxx/> 与子标签中的<put-attribute />完成对页面个性化的引用.

其效果类似于<jsp:include/>,优点是当大量修改模板框架时,只需要改动tiles配置文件.

<?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>
<!-- 主布局文件,主要提供页面框架构造,template为主要框架jsp文件地址,地址内容从webapp开始 -->
<definition name="layout" template="/WEB-INF/tiles/layout.jsp"/> <!-- 主要注意其name属性,整合后的返回值为其name -->
<definition name="struts-tiles" extends="layout">
<put-attribute name="left" value="/WEB-INF/jsp/user/userLeft.jsp"/>
<put-attribute name="right" value="/WEB-INF/jsp/user/userRight.jsp"/>
<put-attribute name="bottom" value="/WEB-INF/jsp/user/userBottom.jsp"/>
</definition>
... </tiles-definitions>

layout.jsp: 提供整个页面框架

<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!-- 注意引入tiles标签!!!!!!!!!!!!! -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body> <div>
   <!-- 与tiles文件中的put-attribute对应,此处的页面布局是为了简便没有设置大小及占比 -->
<tiles:insertAttribute name="left"/>
</div>
<div>
<tiles:insertAttribute name="right"/>
</div>
<div>
<tiles:insertAttribute name="bottom"/>
</div> </body>
</html>

TilesAction部分代码:

...
public String tile() {
...
return "tilePage";
}
...

整合完成,将项目发布到中间件上按照struts2访问规则,即可访问.

参考:https://tiles.apache.org/

https://stackoverflow.com/questions/4770344/struts-2-tiles-nosuchdefinitionexception

   https://github.com/lukaszlenart/struts2-tiles-demo

最新文章

  1. form data和request payload的区别
  2. linux 下删除重复行-- uniq 与 awk
  3. jQuery最佳实践(转载)
  4. C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件
  5. MVC学习笔记索引帖
  6. Struts表单格局;theme三个属性值:simple,xhtml,css_xhtml
  7. 【剑指offer】从尾到头打印链表
  8. struts2启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
  9. C#线程篇---Task(任务)和线程池不得不说的秘密(5)
  10. printf 对齐
  11. 介绍开源的项目管理系统-Redmine
  12. nginx三种安装方法(转载)
  13. Java 基础 面向对象和抽象类
  14. linux 查看和修改文件时间
  15. Latex: 解决 The gutter between columns is x inches wide (on page x), but should be at least 0.2 inches. 问题
  16. 网络中TCP、IP、MAC、UDP的头部格式信息
  17. vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现前后台分离开发
  18. [bzoj4391] [Usaco2015 dec]High Card Low Card 贪心 线段树
  19. Theme.AppCompat.Light无法找到问题
  20. 算法(Algorithms)第4版 练习 1.5.8

热门文章

  1. 前端基础之JavaScript
  2. oracle排序的几种方法
  3. PHP中include与require的特点和区别说明
  4. Python自学笔记-filter()函数(来自廖雪峰的官网Python3)
  5. 新版MySql 5.6.20,安装后无法登陆的解决办法
  6. windowsxp_电脑桌面显示不出来。
  7. web自动化测试从入门到持续集成(selenium webdriver)
  8. win10 uwp 隐藏实时可视化
  9. 【转】NOR Flash擦写和原理分析
  10. [译]ASP.NET Core 2.0 全局配置项