zoukankan      html  css  js  c++  java
  • Struts2-Tiles整合

    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

  • 相关阅读:
    java 异常练习题1
    java 异常练习题
    java 抽象类
    java 接口练习题6
    java 接口练习题5
    java 接口练习题4
    java 接口练习题3
    java接口练习题2
    java 接口练习题1
    java 泛型
  • 原文地址:https://www.cnblogs.com/sknn/p/7844652.html
Copyright © 2011-2022 走看看