1

コンベンションプラグインですでに実行されているstrut 2アプリケーションでSpringプラグインを構成しようとしているので、注釈を使用しています。Spring プラグインを導入するまでは最初はうまく機能していたフォーム送信に ExtJs を使用していますが、今では ajax リクエストがアクションを見つけることができず、firebug で応答が表示されません。

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>

アクション クラス

@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 Request firebug レポート、XML タブ

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

私の質問は、注釈付きの struts コンベンション プラグインと連携するように struts-spring プラグインを構成するにはどうすればよいかということです。

4

1 に答える 1

2

struts2-spring-pluginstruts2-CDI-pluginの両方をインポートしています。

しないでください。

上記のプラグインの 1 つだけを選択し、適切に構成します。

  • CDI プラグインを使用するには、Maven で JAR をインポートし、注入するオブジェクトに(右の) @Inject アノテーションを付けるだけです。

  • Spring プラグインを使用するには、JAR をインポートしContextLoaderListener、web.xml に を追加し (既に設定済み)、Spring を struts.xmlで objectFactory として使用することを次の定数で指定します。

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

Java EE >= 6 を使用している場合は、CDIプラグインの方が適しています。

于 2015-03-02T11:17:52.977 に答える