Hi All,


I have been playing with Struts 2.0 sample application, struts-blank, and
integrates it with Spring 2.x. So far, I have not been having great success
with it.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


I have followed all the steps needed to integrate Struts 2.0 with Spring 2.0.
Here is what I have done so far:



1) Included struts2-spring-plugin-2.0.6.jar, spring.jar,
struts2-core-2.0.6.jar and the dependent jars.



2) Modified the example.xml to include spring object factory:



           <!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.objectFactory" value="spring" />



   <package name="example" namespace="/example" extends="struts-default">



     <default-interceptor-ref name="defaultStack"/>



       <action name="helloWorld" class="helloWorld">

           <result>/example/HelloWorld.jsp</result>

       </action>



       <action name="Login_*" method="{1}" class="example.Login">

           <result name="input">/example/Login.jsp</result>

           <result type="redirect-action">Menu</result>

       </action>



       <action name="Menu" class="Menu">

           <result>/example/Menu.jsp</result>

       </action>



       <action name="*" class="example.ExampleSupport">

           <result>/example/{1}.jsp</result>

       </action>



       <!-- Add actions here -->

   </package>

</struts>



3) I have edited the spring applicationContext.xml



 <?xml version="1.0" encoding="UTF-8"?>

 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd";>



 <beans default-autowire="autodetect">



     <!-- =============================== Interceptors
================================= -->

     <bean id="timeLoggingAdvice" class="advice.TimeLoggingInterceptor"/>



     <!-- =============================== Advisor
====================================== -->

     <bean id="timeLoggingAdvisor" class="
org.springframework.aop.support.NameMatchMethodPointcutAdvisor">

           <property name="mappedNames">

              <list>

                 <value>execute</value>

              </list>

            </property>

           <property name="advice">

                 <ref bean="timeLoggingAdvice"/>

           </property>

     </bean>



     <!-- ============================== Spring Beans
================================= -->



     <bean id="helloWorld" class="example.HelloWorld" singleton="false"/>



     <bean id="Menu" class="
org.springframework.aop.framework.ProxyFactoryBean">

           <property name="proxyInterfaces">

                 <value>example.IMenu</value>

           </property>

           <property name="interceptorNames">

                 <list>

                       <value>timeLoggingAdvisor</value>

                 </list>

           </property>

           <property name="target">

                 <ref local="MenuTarget"/>

           </property>

     </bean>



     <bean id="MenuTarget" class="example.Menu" singleton="false"/>



  </beans>



4) Implemented ModelDriven, Preparable and SessionAware interfaces in
Menu.java:



   package example;



import java.util.Map;



import org.apache.struts2.interceptor.SessionAware;



import com.opensymphony.xwork2.ModelDriven;

import com.opensymphony.xwork2.Preparable;



/**

* <code>Set welcome message.</code>

*/

public class Menu extends ExampleSupport implements IMenu, ModelDriven,
Preparable, SessionAware {



           private Map _session;

           private User user;



   public String execute() throws Exception {



       return SUCCESS;

   }



           public Object getModel() {

                       return user;

           }



           public void prepare() throws Exception {

                       if (getSession().get("user") != null) {

                                   user = (User) getSession().get("user");

                       } else {

                                   user = new User();

                       }

           }



           public void setSession(Map session) {

                       _session = session;

           }



           public Map getSession() {

                       return _session;

           }

}







When I let Spring manages the creation of objects, the methods for the
implemented interfaces such as getModel() and prepare() are not invoked. If
I change the class="Menu" to class="example.Menu", the interfaces methods
were invoked since I am not letting spring manages object creation.



Could someone let me know what I may have done wrong? How can I use Spring
and Struts at the same time without losing either functionality?



Any help is greatly appreciated.



Thanks!

Lee

Reply via email to