1

我想配置弹簧插件与已经与约定插件运行的strut 2应用程序,所以我使用注释。我使用ExtJs进行表单提交,最初运行良好,直到我引入了Spring插件,现在ajax请求找不到这些动作,并且它在萤火虫中没有显示任何响应。如何配置struts约定插件与struts-spring插件与映射与注释的Action类

的pom.xml

<!-- struts 2 dependencies --> 
<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-core</artifactId> 
    <version>${struts2.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-convention-plugin</artifactId> 
    <version>${struts2.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-json-plugin</artifactId> 
    <version>${struts2.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-spring-plugin</artifactId> 
    <version>${struts2.version}</version> 
</dependency> 

<!-- Import the CDI API --> 
<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-cdi-plugin</artifactId> 
    <version>${struts2.version}</version> 
</dependency> 
<dependency> 
<groupId>javax.enterprise</groupId> 
    <artifactId>cdi-api</artifactId> 
    <version>1.0-SP1</version><!--$NO-MVN-MAN-VER$--> 
    <scope>provided</scope> 
</dependency> 

<!-- Spring framework --> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>${spring.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${spring.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>${spring.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>${spring.version}</version> 
</dependency> 

struts.xml中

<?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.custom.i18n.resources" value="ApplicationResources" /> 
    <constant name="struts.devMode" value="true" /> 
    <constant name="struts.convention.result.path" value="/content" /> 
    <constant name="struts.multipart.saveDir" value="/tmp" /> 
    <constant name="struts.multipart.maxSize" value="4194304" /> 
    <constant name="struts.action.excludePattern" value="/api/.*?" /> 

</struts> 

的web.xml

<display-name>Application</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

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

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>Resteasy</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Resteasy</servlet-name> 
    <url-pattern>/api/*</url-pattern> 
</servlet-mapping> 
<context-param> 
<param-name>resteasy.scan</param-name> 
<param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/api</param-value> 
</context-param> 
<listener> 
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
</listener> 

的applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
</beans> 

Action类

@Namespace("/units") 
@Result(
    type = "stream", 
    params = { 
     "inputName", "stream" 
    } 
) 
public class PropertyTypeAction extends BaseAction implements ActionImpl{ 

    @PersistenceUnit 
    private EntityManagerFactory emf; 

    @Action(value="add") 
    public String add() { 
     ....... 

    } 
} 

Ajax请求Firebug的报告,XML标签

XML Parsing Error: no element found Location: moz-nullprincipal:{7fc640bd-f293-4956-8cf2-178765cec735} Line Number 1, Column 1: 

我的问题是如何配置支柱弹簧插件与注释一起使用struts convention插件。

+0

我需要它,因为我有GenericDao中,我被注入实体经理,但使用CDI,它始终为空。在线搜索后,所有提供的解决方案都是使用spring实现持久性注入..这就是为什么我想尝试spring解决方案..实际的问题是struts 2.3.20有一些日志问题与野蛮(没有记录任何东西在运行时)..我只是降级到2.3.16。3,我能够跟踪错误 – bavon 2015-03-04 04:44:17

回答

2

您正在导入两个Struts2的弹簧,插件的struts2-CDI-插件

不要。

只选择上述插件之一,然后正确配置:

  • 要使用CDI插件,只需导入与Maven的JAR和启动注释要与被注入的对象the (right) @Inject annotation

  • 要使用春插件,导入JAR,添加ContextLoaderListener在web.xml(您已经设置),并指定要在struts.xml中use Spring as objectFactory,随着不断:

    <constant name="struts.objectFactory" value="spring" /> 
    

恕我直言CDI plugin is the better option,如果你使用的是Java EE> = 6