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

  • 相关阅读:
    SAP MM 采购附加费计入物料成本之二
    SAP MM 采购附加费计入物料成本?
    SAP MM 作为采购附加费的运费为啥没能在收货的时候计入物料成本?
    SAP MM 外部采购流程里的Advanced Return Management
    SAP MM 外部采购流程里的如同鸡肋一样的Advanced Returns Management功能
    SAP MM Why is the freight not included in the material cost at the time of GR?
    SAP MM: Change of material moving average price after goods receipt and invoice verification posting for PO
    SAP 创建启用了ARM功能的采购订单,报错 Shipping processing is not selected to supplier 100057 in purchase org. 0002
    GIT·代码仓库默认分支更改
    .Net/C#·运行报错缺少XXX文件,但双击无法跳转缺少位置
  • 原文地址:https://www.cnblogs.com/sknn/p/7844652.html
Copyright © 2011-2022 走看看