Struts2 如何将Struts 2与Tiles 3集成

Struts2 如何将Struts 2与Tiles 3集成,struts2,tiles,tiles-3,Struts2,Tiles,Tiles 3,如何将Struts 2与Tiles 3集成?struts2 tiles插件目前(2.3.4.1)与旧版本的tiles(2.0.6版)一起使用,这可能有点麻烦 这是一个自我回答,帮助其他人进行集成。解决方案是添加所需的依赖项,使用适当的侦听器加载互动程序,并创建自定义结果类型。幸运的是,这些步骤非常简单,一旦完成,您就可以按照普通瓷砖2示例了解如何定义模板 1) 依赖项(从基本struts项目开始,但在本例中我将使用约定,因此最好添加struts2约定插件,它将包括struts2 core等):

如何将Struts 2与Tiles 3集成?struts2 tiles插件目前(2.3.4.1)与旧版本的tiles(2.0.6版)一起使用,这可能有点麻烦


这是一个自我回答,帮助其他人进行集成。

解决方案是添加所需的依赖项,使用适当的侦听器加载互动程序,并创建自定义结果类型。幸运的是,这些步骤非常简单,一旦完成,您就可以按照普通瓷砖2示例了解如何定义模板

1) 依赖项(从基本struts项目开始,但在本例中我将使用约定,因此最好添加struts2约定插件,它将包括struts2 core等):

  • 不包括struts2瓷砖插件
  • groupId:org.apache.tiles,artifiactId:tiles-extras,版本:3.0.1
  • groupId:org.slf4j,artifiactId:jcl-over-slf4j,版本:1.5.8
  • groupId:org.slf4j,artifiactId:slf4j-jdk14,版本:1.5.8
注意:一个更高版本的slf4j依赖项可能会起作用,我还没有对此进行测试

2) 使用适当的侦听器加载互动程序

本例包括完整的web.xml,对于熟悉struts2的人来说,第3-5行是唯一新的内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <listener>
        <listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</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>
</web-app>
4) 我们还需要告诉struts2我们的结果类型:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.ui.theme" value="simple" />
    <package  name="tiles-package"  namespace="" extends="struts-default">
        <result-types>
            <result-type default="true" name="tiles-result" class="com.quaternion.result.TilesResult"/>
        </result-types>
    </package>   
</struts>


就是这样,这将允许您使用tiles 3+配置任何版本的struts2,有关更多配置详细信息,请参阅。

多亏了Ken,Struts 2添加了一个新插件以支持tiles 3结果类型,它应该可以在即将发布的新版本Struts 2.3.9中使用



在tiles.xml中使用提到的doctype是的,我应该创建一个JIRA任务。。。这就是你的意思吗?在写之前的评论时,我还不知道你和struts dev的一个人是same@quaternion,太好了,谢谢。我一直在胡闹着把瓷砖绑到struts2大会上,这是可行的,但不太好。。。也许我也可以把它发送给你?请这样做,这是第一次尝试支持Tiles 3,所以我们可以用下一个版本来扩展它,因为。。。这个插件可以用更少的工作完成上述任务。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.ui.theme" value="simple" />
    <package  name="tiles-package"  namespace="" extends="struts-default">
        <result-types>
            <result-type default="true" name="tiles-result" class="com.quaternion.result.TilesResult"/>
        </result-types>
    </package>   
</struts>
package com.quaternion.demo.action.test;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

@ParentPackage("tiles-package")
@Result(type="tiles-result", location="test.definition")
public class QuaternionResultTest extends ActionSupport{}
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">