2012-10-04 105 views
0

我使用Spring來管理struts 2動作bean。我正在嘗試從基於XML的配置遷移到基於註釋的配置。我正在使用struts2-spring-plugin,以便struts獲取由spring管理的對象的句柄。 以下內容位於myAction的applicationContext文件中。struts2註釋spring管理bean

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema 
     /beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org 
     /schema/context/spring-context-3.0.xsd"> 
    <context:annotation-config /> 
    <bean id="myAction123" class="com.action.MyAction" scope="prototype"></bean> 
</beans> 

在struts2-tiles配置文件中,我定義了請求映射。該映射使用對spring創建的bean的引用。 class屬性引用spring bean定義中定義的id屬性。

<action name="myAction_*" method="{1}" class="myAction123"> 
     <result name="success" type="tiles">action.request.view</result> 
    </action> 

Action類被註釋如下:

@Controller 
public class MyAction { 

    @Autowired 
    public MyService myService; 

    public MyService getMyService() { 
     return myService; 
    } 

    public void setMyService(MyService myService) { 
     this.myService = myService; 
    } 

    public String doSearch() { 
     /* ... */ 
    } 
} 

請看以下堆棧跟蹤,通過支柱拋出,當我刪除春風行動bean引用。

09:10:37,852 ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/gas] - Exception starting filter struts 
Action class [volumeRequestAction] not found - action - file:/C:/dev/Workspace/GAS2/_GAS2WebApp/target/_GAS2WebApp-2.0/WEB-INF/classes/struts2-tiles.xml:701:81 
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:374) 
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:329) 
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:429) 
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:239) 
at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111) 
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:152) 
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52) 
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395) 
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452) 
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201) 
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221) 
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302) 
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78) 
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) 
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626) 
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) 
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488) 
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138) 
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 
Oct 5, 2012 9:10:37 AM org.apache.catalina.core.StandardContext start 

據我所知,我沒有把正確的註解放在哪個地方,這是造成這個問題的原因。儘管我已經嘗試瞭解這一點,但我仍然對移植這個特定部分感到困惑。我無法弄清楚我是否會爲此使用struts 2註釋或者Spring註解。任何幫助表示讚賞。謝謝。

+0

'BaseSupport'究竟是什麼? –

+0

究竟是什麼不起作用? –

+0

忽略BaseSupport。我編輯了問題並刪除了該問題。我使用XML配置文件設置了struts2&spring。我正試圖將它們移到Spring 3註釋中。在這樣做的時候,我的struts2-tiles配置文件使用了Spring創建的myAction bean。對於這個參考。 struts使用類名稱myAction123映射到bean id myAction123(在問題中進行了更改以使其更清晰)。現在我想從applicationContext文件中刪除動作bean定義。在這樣做時,struts會引發異常「Action class [volumeRequestAction] not found - struts2-tiles.xml」。 – blaks

回答

1

您還需要行

<context:component-scan base-package="my.package.path" /> 

在您的應用程序context.xml文件來告訴Spring去哪裏去找註釋。使用@Controller註釋沒有任何問題。

+0

是的,解決了這個問題。非常感謝你。 – blaks