Struts и Spring вместе?
Я довольно новичок в Struts и Spring. Мне нужно знать, как получить доступ к сервису Spring в Struts ActionForm. Даже указатель в правильном направлении был бы оценен.
3 ответа
Из класса ActionForm Struts 1 вам понадобится:
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext).getBean("yourService");
Вы используете Struts 1 или 2?
Если вы используете Struts 1, то есть несколько способов сделать это. Я предпочитаю делать это с помощью org.springframework.web.struts.DelegatingActionProxy. Вам нужно будет иметь spring-webmvc-struts.jar в пути к классам.
распорки-config.xml:
<action path="/faq" type="org.springframework.web.struts.DelegatingActionProxy" name="faqForm" parameter="method">
<forward name="List" path="faq.list" />
</action>
applicationContext.xml:
<bean name="/faq" class="com.mypackage.FAQAction" autowire="byType" />
Я нашел эту технику самой элегантной, она не влияет на старый код, который не использует Spring.
Существует как минимум еще два способа соединения распорок 1 с пружиной. В ibm developerworks есть статья, в которой объясняются плюсы и минусы различных решений, в Google "Получите лучшее управление действиями Struts с помощью Spring" (новичкам, подобным мне, не разрешается включать ссылки).
Обычно вы добавляете весенний слушатель contextloader в свой веб-XML.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Затем вы добавляете
<constant name="struts.objectFactory" value="spring"/>
на ваши struts.xml.
Тогда в вашем классе действий вы можете сказать что-то вроде:
class MyAction {
@Autowired MyService service;
....
}
Это все, что нужно для распорок2.