当前位置: 首页 > 知识库问答 >
问题:

如何将Struts 2与Tile 3集成

窦凯定
2023-03-14

我们如何集成Struts 2和Tiles 3?struts2-tiles-plugin目前(2.3.4.1)支持旧版本的tiles(版本2.0.6 ),这可能有点麻烦。

这是一个自我回答,帮助他人融入。

共有3个答案

漆雕宏浚
2023-03-14
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

在tiles.xml中使用提到的doctype

姬正文
2023-03-14

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

https://cwiki.apache.org/confluence/display/WW/Tiles 3插件

郏瀚
2023-03-14

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

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

  • 不要包含 STRUTS2-TILES-插件
  • groupId: org.apache.tiles, artifiactId: tiles-extras, version: 3.0.1
  • groupId: org.slf4j,
  • artifiactId: jcl-over-slf4j, version: 1.5.8
  • groupId: org.slf4j,
  • artifiactId: slf4j-jdk14, version: 1.5.8

注意:slf4j依赖项的更高版本可能工作,我没有测试过。

2)用适当的监听器加载图块

这个例子包括完整的web.xml,第3-5行是熟悉struts2的人唯一应该陌生的东西。

<?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>

3)创建自定义结果类型

我们需要定义一个自定义结果类型以用于我们的操作:

package com.quaternion.result;

import com.opensymphony.xwork2.ActionInvocation;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.ServletDispatcherResult;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.servlet.ServletRequest;
import org.apache.tiles.request.servlet.ServletUtil;

public class TilesResult extends ServletDispatcherResult {

    public TilesResult() {
        super();
    }

    public TilesResult(String location) {
        super(location);
    }

    @Override
    public void doExecute(String location, ActionInvocation invocation) throws Exception {
        //location = "test.definition"; //for test
        setLocation(location);
        ServletContext context = ServletActionContext.getServletContext();
        ApplicationContext applicationContext = ServletUtil.getApplicationContext(context);
        TilesContainer container = TilesAccess.getContainer(applicationContext);
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        ServletRequest servletRequest = new ServletRequest(applicationContext, request, response);
        container.render(location, servletRequest);
    }
}

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了,假设我们已经创建了一个名为“test.definition”的tiles定义,我们可以通过执行以下操作来告诉我们的操作使用该定义:

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{}

仅此而已,这将允许您使用磁贴3配置任何版本的struts2,有关更多配置详细信息,请参阅http://tiles.apache.org/framework/index.html。

 类似资料:
  • 目前,我的应用程序使用SpringMVC进行所有控制器映射。我正在尝试实现一个tinyMCE拼写检查,它包括一个Servlet,我不确定如何在不修改该文件本身的情况下正确集成该Servlet。我想避免修改,这样如果我们以后有新版本,我们就可以了。 Servlet看起来像...

  • 问题内容: 有人知道将soapUI测试添加到我的CI版本的好方法吗? 问题答案: soapUI通过Maven或Ant提供测试自动化。在这里描述了Maven集成。 我在一个月前尝试过,但是在eviware存储库中遇到了一些奇怪的问题…因此,我现在通过Ant运行测试。您要做的是在soapUI bin目录中调用(或)脚本。您可以在此处找到可用的参数。 您必须在Hudson构建服务器上安装soapUI。然

  • 问题内容: 我正在寻找有关symfony2中有关ajax的简单教程/示例,供初学者使用? 我有这些例子: city.php:http://pastebin.com/Qm8LS5kh ajax_req.js:http://pastebin.com/UqJMad24 index.html:http://pastebin.com/H1err4Yh 如何将它们放入Symfony2应用程序中? 问题答案:

  • 当我在插件和“测试连接”中配置SonarQube服务器时,我正在尝试使用Intellij运行Solar Lint 我一直收到以下错误消息: 以下插件不符合要求的最低版本,请升级:java(安装:3.7,最低:3.8) 我不完全明白这意味着什么,我真的很感激在这方面的任何帮助。 P、 我无法升级sonar服务器上的Java插件,如果这是这个问题的唯一解决方案,因为我无法访问服务器管理功能。

  • 问题内容: 我是Angular和Flot的新手,但对Jquery和Javascript经验丰富。我对如何将Flot图表绑定到Angular数据模型感到有些困惑,因为Flot是一个JQuery插件。我到处搜寻,但找不到范例。 我也很乐意使用highcharts,google-charts或任何其他图表解决方案。 问题答案: 由于制图涉及大量的DOM操作,因此使用指令是可行的。 数据可以保存在控制器中

  • 我有一个使用Log4j和Velocity V1.7的web应用程序 这就是我如何集成Log4j和Velocity1.7 显然,没有与log4j2兼容的Log4JLogChute的等价物。 有人知道如何实现Log4j2和velocity之间的兼容性吗?

  • 我尝试在Tomee 1.5.2 WebProfile中使用jer1.18部署一个非常简单的RESTful Web服务。我的项目完全受到tomee-jersey-eclipselink的启发 我通过删除持久性部分进一步简化的示例:Web 服务只是重新调整“你好,世界! 我在POM中的依赖关系: 我使用与应用程序模型无关的应用程序模型部署我的 Web 服务: 这是我的网络.xml: 我还在$TOMEE

  • 如何将JIRA与Selenium WebDriver集成?实际上,我想在JIRA中执行测试用例并报告每个测试用例的通过/失败状态。