аннотация struts2 управляемые bean-компоненты spring

Я использую Spring для управления компонентами действий struts 2. Я пытаюсь перейти с конфигурации на основе XML на аннотацию. Я использую struts2-spring-plugin, чтобы struts получал дескриптор объекта, управляемого spring. Следующее находится в файле applicationContext для myAction.

<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 я определяю сопоставление запросов. Это сопоставление использует ссылку на bean-компонент, созданный Spring. Атрибут класса относится к атрибуту id, определенному в определении bean-компонента Spring.

    <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() {
        /* ... */
    }
}

Пожалуйста, найдите ниже трассировку стека, созданную struts, когда я удаляю ссылку на bean-компонент spring action.

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. Любая помощь приветствуется. Спасибо.


person blaks    schedule 04.10.2012    source источник
comment
что именно BaseSupport   -  person Umesh Awasthi    schedule 04.10.2012
comment
Не обращайте внимания на BaseSupport. Я отредактировал вопрос и удалил это. У меня есть struts2 и spring, настроенные с использованием файлов конфигурации XML. Я пытаюсь переместить их в весенние 3 аннотации. При этом мой конфигурационный файл struts2-tiles использует bean-компонент myAction, созданный Spring. Для этого исх. struts использует имя класса myAction123 для сопоставления с идентификатором bean-компонента myAction123 (изменено в вопросе, чтобы сделать его более понятным). Теперь я хочу удалить определение компонента действия из файла applicationContext. При этом Struts выдает мне исключение Класс Action [volumeRequestAction] не найден — struts2-tiles.xml.   -  person blaks    schedule 05.10.2012


Ответы (1)


Вам также понадобится строка

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

в вашем файле application-context.xml, чтобы указать Spring, куда идти и искать аннотации. Нет ничего плохого в использовании аннотации @Controller.

person user497087    schedule 05.10.2012