The default implementation determines a bean name from the 4. * given ActionMapping and looks up the corresponding bean in the 5. * WebApplicationContext. 6. * @param mapping the Struts ActionMapping 7. * @return the delegate Action 8. * @throws BeansException if thrown by WebApplicationContext methods 9. * @see #determineActionBeanName 10. */ 11. protected Action getDelegateAction(ActionMapping mapping); throws BeansException { 12. WebApplicationContext wac = getWebApplicationContext(getServlet();, mapping.getModuleConfig(););; 13. String beanName = determineActionBeanName(mapping);; 14. return (Action); wac.getBean(beanName, Action.class);; 15. } 16. 17. /** 18. * Fetch ContextLoaderPlugIn's WebApplicationContext from the 19. * ServletContext, containing the Struts Action beans to delegate to. 20. * @param actionServlet the associated ActionServlet 21. * @param moduleConfig the associated ModuleConfig 22. * @return the WebApplicationContext 23. * @throws IllegalStateException if no WebApplicationContext could be found 24. * @see DelegatingActionUtils#getRequiredWebApplicationContext 25. * @see ContextLoaderPlugIn#SERVLET_CONTEXT_PREFIX 26. */ 27. protected WebApplicationContext getWebApplicationContext( 28. ActionServlet actionServlet, ModuleConfig moduleConfig); throws IllegalStateException { 29. return DelegatingActionUtils.getRequiredWebApplicationContext(actionServlet, moduleConfig);; 30. } /** * Return the delegate Action for the given mapping. *
The default implementation determines a bean name from the * given ActionMapping and looks up the corresponding bean in the * WebApplicationContext. * @param mapping the Struts ActionMapping * @return the delegate Action * @throws BeansException if thrown by WebApplicationContext methods * @see #determineActionBeanName */ protected Action getDelegateAction(ActionMapping mapping); throws BeansException { WebApplicationContext wac = getWebApplicationContext(getServlet();, mapping.getModuleConfig(););; String beanName = determineActionBeanName(mapping);; return (Action); wac.getBean(beanName, Action.class);; } /** * Fetch ContextLoaderPlugIn's WebApplicationContext from the * ServletContext, containing the Struts Action beans to delegate to. * @param actionServlet the associated ActionServlet * @param moduleConfig the associated ModuleConfig * @return the WebApplicationContext * @throws IllegalStateException if no WebApplicationContext could be found * @see DelegatingActionUtils#getRequiredWebApplicationContext * @see ContextLoaderPlugIn#SERVLET_CONTEXT_PREFIX */ protected WebApplicationContext getWebApplicationContext( ActionServlet actionServlet, ModuleConfig moduleConfig); throws IllegalStateException { return DelegatingActionUtils.getRequiredWebApplicationContext(actionServlet, moduleConfig);; } 仔细看其中的取wac的代码,它并不是从WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE取的wac。 由此,我相信,除了robbin讲的修改源码以外,同时使用ContextLoaderListener和ContextLoaderPlugIn,但是不要在ContextLoaderPlugIn里面加入applicationContext.xml,只要加入你的action-servlet.xml,我相信,同样也可以非常流畅的使用OpenSessionInView