Pierre,

this is documented behavior - 
http://struts.apache.org/2.x/docs/model-driven-interceptor.html

see the second note, toward the top of the page.

-Wes

On Wed, 2008-08-27 at 00:18 -0400, Pierre Thibaudeau wrote:
> 2008/8/26 Pierre Thibaudeau <[EMAIL PROTECTED]>
> 
> > [...] suddenly, on my most recent action, the model does not find its way
> > to the top of the stack, and I cannot find where the problem might be.
> >
> 
> I dug deeper into this issue and found something very surprising. The
> strange behaviour centres around the execute() method.  I am very tempted to
> call it a severe bug (for Struts 2.1.2)...
> 
> To make things simple, I produced a test case (see below):  two very simple
> ModelDriven Action classes.  The first one works as expected, and pushes the
> Model ("SmallObject") on top of the ValueStack.  The second action
> surprisingly fails to push the Model on the stack (though the Model is still
> accessible through the Action being on the stack).
> 
> In short, it seems that the model is not pushed on the stack when its value
> is last assigned inside the execute() method!!!
> 
> Am I forgetting something, or is this truly a bug?
> It might be worth knowing from others if the same problem occurs with
> version of Struts earlier than 2.1.2.
> 
> /************/
> /* /test.jsp */
> /************/
> <html><body>
>     Model on the stack: ${foo}<br/>
>     Action on the stack: ${model.foo}
> </body></html>
> 
> /************/
> /* struts.xml */
> /*************/
> <struts>
>     <package name="default" extends="struts-default" abstract="false"
> namespace="/" >
>         <default-interceptor-ref name="paramsPrepareParamsStack"/>
>         <action name="successfull"
> class="com.myapp.SuccessfullAction"><result>/test.jsp</result></action>
>         <action name="failing"
> class="com.myapp.FailingAction"><result>/test.jsp</result></action>
>    </package>
> </struts>
> 
> /******************/
> /* SmallObject.java */
> /******************/
> public class SmallObject {
>     private String foo;
>     public String getFoo() { return foo; }
>     public SmallObject(String str) { foo = str; }
> }
> 
> /*******************/
> /* SuccessfullAction */
> /*******************/
> public class SuccessfullAction extends ActionSupport implements
> ModelDriven<SmallObject>, Preparable {
>     private SmallObject obj;
>     public SmallObject getModel() { return obj; }
>     public void prepare() { obj = new SmallObject("bar"); }
>     public String execute() { return SUCCESS; }
> }
> 
> /******************/
> /* FailingAction */
> /******************/
> public class FailingAction extends ActionSupport implements
> ModelDriven<SmallObject>, Preparable {
>     private SmallObject obj;
>     public SmallObject getModel() { return obj; }
>     public void prepare() { /* do nothing */ }
>     public String execute() {
>         obj = new SmallObject("bar");
>         return SUCCESS;
>     }
> }


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to