Hello Struts2 Users,

 

  I am attempting to utilize the ScopedModelDriven interceptor to manage
user input across multiple form submits, in the style of a simple wizard
with sequential pages of input.  I have declared my Action class
('ScopedModelDrivenAction ') to implement 'ScopedModelDriven' and
provided the necessary setter/getters.  My param mapping is functioning
properly to support ModelDriven approach, as evidenced by the previous
step input available through <s:property...> in subsequent step.

 

  My issue seems to be when I apply the "<param
name="scope">session</param>" to the interceptor, it has no effect.  

 

  I have created a simplistic example below and included all relevant
code.  I have the feeling I am close, but the solution is eluding me.  I
have been through all the documentation I can find on
"ScopedModelDriven", including the "Struts 2 in Action" book I
purchased.  Unfortunately I can find no complete working example of this
feature.  

 

Any help is greatly appreciated.

 

Cheers,

                Andy

 

 


Struts.XML:


 

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

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration
2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd";>

 

<struts>

 

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

 

                                <interceptors>

                                                <interceptor
name="alias"

 
class="com.opensymphony.xwork2.interceptor.AliasInterceptor" />

                                                <interceptor
name="autowiring"

 
class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterc
eptor" />

                                                <interceptor
name="chain"

 
class="com.opensymphony.xwork2.interceptor.ChainingInterceptor" />

                                                <interceptor
name="conversionError"

 
class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"
/>

                                                <interceptor
name="createSession"

 
class="org.apache.struts2.interceptor.CreateSessionInterceptor" />

                                                <interceptor
name="debugging"

 
class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />

                                                <interceptor
name="externalRef"

 
class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor
" />

                                                <interceptor
name="execAndWait"

 
class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor" />

                                                <interceptor
name="exception"

 
class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"
/>

                                                <interceptor
name="fileUpload"

 
class="org.apache.struts2.interceptor.FileUploadInterceptor" />

                                                <interceptor name="i18n"

 
class="com.opensymphony.xwork2.interceptor.I18nInterceptor" />

                                                <interceptor
name="logger"

 
class="com.opensymphony.xwork2.interceptor.LoggingInterceptor" />

                                                <interceptor
name="modelDriven"

 
class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor" />

                                                <interceptor
name="scopedModelDriven"

 
class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"
/>

                                                <interceptor
name="params"

 
class="com.opensymphony.xwork2.interceptor.ParametersInterceptor" />

                                                <interceptor
name="prepare"

 
class="com.opensymphony.xwork2.interceptor.PrepareInterceptor" />

                                                <interceptor
name="staticParams"

 
class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"
/>

                                                <interceptor
name="scope"

 
class="org.apache.struts2.interceptor.ScopeInterceptor" />

                                                <interceptor
name="servletConfig"

 
class="org.apache.struts2.interceptor.ServletConfigInterceptor" />

                                                <interceptor
name="sessionAutowiring"

 
class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInt
erceptor" />

                                                <interceptor
name="timer"

 
class="com.opensymphony.xwork2.interceptor.TimerInterceptor" />

                                                <interceptor
name="token"

 
class="org.apache.struts2.interceptor.TokenInterceptor" />

                                                <interceptor
name="tokenSession"

 
class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor" />

                                                <interceptor
name="validation"

 
class="org.apache.struts2.interceptor.validation.AnnotationValidationInt
erceptor" />

                                                <interceptor
name="workflow"

 
class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"
/>

                                                <interceptor
name="store"

 
class="org.apache.struts2.interceptor.MessageStoreInterceptor" />

                                                <interceptor
name="checkbox"

 
class="org.apache.struts2.interceptor.CheckboxInterceptor" />

                                                <interceptor
name="profiling"

 
class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />

                                                <interceptor
name="roles"

 
class="org.apache.struts2.interceptor.RolesInterceptor" />

 

                                                <interceptor-stack
name="customStack">

 
<interceptor-ref name="exception" />

 
<interceptor-ref name="alias" />

 
<interceptor-ref name="servletConfig" />

 
<interceptor-ref name="prepare" />

 
<interceptor-ref name="i18n" />

 
<interceptor-ref name="chain" />

 
<interceptor-ref name="debugging" />

 
<interceptor-ref name="profiling" />

 
<interceptor-ref name="scopedModelDriven">

 
<param name="scope">session</param>

 
</interceptor-ref>

 
<interceptor-ref name="modelDriven" />

 
<interceptor-ref name="fileUpload" />

 
<interceptor-ref name="checkbox" />

 
<interceptor-ref name="staticParams" />

 
<interceptor-ref name="params">

 
<param name="excludeParams">dojo\..*</param>

 
</interceptor-ref>

 
<interceptor-ref name="conversionError" />

 
<interceptor-ref name="validation">

 
<param name="excludeMethods">input,back,cancel,browse</param>

 
</interceptor-ref>

 
<interceptor-ref name="workflow">

 
<param name="excludeMethods">input,back,cancel,browse</param>

 
</interceptor-ref>

                                                </interceptor-stack>

                                </interceptors>

 

                                <action name="ScopedModelDrivenSubmit2"
class="test.struts.ScopedModelDrivenAction">

                                                <interceptor-ref
name="customStack" />

 
<result>/srsm/test/ScopedModelDrivenResults.jsp</result>

                                </action>

 

                                <action name="ScopedModelDrivenSubmit1"
class="test.struts.ScopedModelDrivenAction">

                                                <interceptor-ref
name="customStack" />

 
<result>/srsm/test/ScopedModelDrivenForm2.jsp</result>

                                </action>

 

                </package>

 

</struts>

 

 


ScopedModelDrivenAction.java:


 

package test.struts;

 

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.interceptor.ScopedModelDriven;

 

public class ScopedModelDrivenAction extends ActionSupport implements

        ScopedModelDriven<UserModel> {


 

                private static final long serialVersionUID = 1L;

 

                private UserModel user = new UserModel();

 

                public void setUser(UserModel usr) {

                                user = usr;

                }

 

                public UserModel getUser() {

                                return user;

                }

 

                /**

                 * Implementation for ScopedModelDriven

                 */

                private String scope = "";

 

                @Override

                public String getScopeKey() {

                                return scope;

                }

 

                @Override

                public void setModel(UserModel arg0) {

                                user = arg0;

                }

 

                @Override

                public void setScopeKey(String arg0) {

                                scope = arg0;

                }

 

                @Override

                public UserModel getModel() {

                                return user;

                }

 

}

 

 


UserModel.java:


 

package test.struts;

 

public class UserModel {

 

                private String firstname = "";

                private String lastname = "";

 

                public void setFirstname(String fn) {

                                firstname = fn;

                }

 

                public void setLastname(String ln) {

                                lastname = ln;

                }

 

                public String getFirstname() {

                                return firstname;

                }

 

                public String getLastname() {

                                return lastname;

                }

 

}

 

Reply via email to