Ah, now I see. Most of my data access methods take the existing object and
save it via hibernate, which means that the saved or added object would be
the same object instance as the model object. In that case, the object ref
on the stack is the same as the one handed back via the data access method.
But the load method only takes the id, which it uses to populate a new
object instance. So it looks like I do need a manual stack update. Luckily
it looks like it should only be on the load method. Confusion on my part,
and I have no problem calling a manual stack update in this case.

Thanks for the help.

PS I didn't include the getModel accessor but it is in there.

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Jason
Carreira
Sent: Wednesday, November 12, 2003 5:03 PM
To: [EMAIL PROTECTED]
Subject: RE: [OS-webwork] Further weirdness with the valuestack and
modeldriven

Where's getModel()?

Also, you seem to be setting your model reference to a new object? How would
the stack have a reference to the new object?


Here's the order of calls to your Action:

new MyAction();
getModel(); // this object is pushed onto the ValueStack
setProperty1(...)
setProperty2(...)
doLoad()

If you change the model in doLoad(), how would it have the reference to that
object on the ValueStack?

Also note that you can change whether the properties are set before or after
the getModel() is called. You can also separate this so that your static
parameters (the ones defined in <param> elements in your xwork.xml inside
the <action> element) are set before getModel() and the request parameters
are set afterwards.

Jason 

> -----Original Message-----
> From: Drew McAuliffe [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, November 12, 2003 5:14 PM
> To: [EMAIL PROTECTED]
> Subject: RE: [OS-webwork] Further weirdness with the valuestack and 
> modeldriven
> 
> 
> Here it is. "getSession()" is returning a thread local session object. 
> The Manager class is a class encapsulating data access.
> 
> from member declarations:
> // MODEL OBJECT       
>       private Requirement model = new Requirement();
>       public Object getCurrentObject(){return this.model;}
> 
> load action method:
>       /**
>        * Loads a Requirement.
>        */
>       public String doLoad() throws Exception
>       {
>               try
>               {
>                       IUserInfo userInfo = getUserInfo();
>                       Session session = getSession();
>                       RequirementManager mgr = new
> RequirementManager(session);
>                       if (currentId != null)
>                               model = mgr.load(currentId, userInfo);
>                       updateModelInStack();
>               }
>               catch (LogicException e)
>               {
>                       if (e.getErrorMessages() != null)
>                               
> this.setActionErrors(e.getErrorMessages());
>                       else
>                               addActionError(e.getMessage());
>                       return ERROR;
>               }
>               catch(Exception e)
>               {
>                       log.error(e);
>                       this.addActionError(e.getMessage());
>                       return ERROR;
>               }
>               log.debug("did load");
>               return SUCCESS;
>       }
> 
> The LogicException is a specialized exception from the manager class 
> that queues up its own error messages, and passes them into the action 
> if necessary. Note that the current code includes a call to 
> "updateModelInStack", which manually pushes the model object back to 
> the top of the stack. Without that call, the updated model isn't on 
> the stack.
> 
> 
> Let me know if this clarifies things.
> 
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of 
> Jason Carreira
> Sent: Wednesday, November 12, 2003 12:40 PM
> To: [EMAIL PROTECTED]
> Subject: RE: [OS-webwork] Further weirdness with the valuestack and 
> modeldriven
> 
> Please post your Action code... I'm suspecting it's 4)
> 
> > -----Original Message-----
> > From: Drew McAuliffe [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, November 12, 2003 3:36 PM
> > To: [EMAIL PROTECTED]
> > Subject: [OS-webwork] Further weirdness with the valuestack and 
> > modeldriven
> > 
> > 
> > In a recent message, I described a problem I had with the
> model object
> > of a ModelDriven action. The model object is pushed onto the top of 
> > the stack by the ModelDrivenInterceptor but after updates
> to the model
> > in the action, the value at the top of the stack isn't the
> same as the
> > updated model.
> > 
> > I've tried to push the updated value back onto the stack, with the
> > push() method in two different ways:
> > 1) By updating the modeldriveninterceptor to push on both
> "before" and
> > (new) "after". This is done as follows:
> >     protected void after(ActionInvocation dispatcher, String
> > result) throws Exception {
> >             pushModel(dispatcher);
> >     }
> > 
> >     protected void before(ActionInvocation invocation) throws 
> > Exception {
> >             pushModel(invocation);
> >     }
> >     
> >     private void pushModel(ActionInvocation invocation)
> >     {
> >             Action action = invocation.getProxy().getAction();
> > 
> >             if (action instanceof ModelDriven) {
> >                     ModelDriven modelDriven = (ModelDriven) action;
> >                     OgnlValueStack stack = invocation.getStack();
> >                     stack.push(modelDriven.getModel());
> >             }
> >     
> >     }
> > 2) Call "push(model)" directly in the action after a load.
> > 
> > The first approach doesn't seem to work, probably because
> I'm dealing
> > with the input params on "after" incorrectly. The second
> approach does
> > work. So, some questions:
> > 
> > 1) Is there something wrong with how I've rigged the 
> > modeldriveninterceptor to work that would prevent it from pushing 
> > properly?
> > 2) Does it make sense to try to push in both "before" and
> "after" in
> > the modeldriveninterceptor anyway, or is this violating
> some part of
> > the design of the interceptor?
> > 3) If I go the second route, with a "push" call in the action, do I 
> > need to call "pop" first to get the old model object off of
> the stack?
> > 4) Or, all of this aside, is there something I'm missing
> about why the
> > top of the stack isn't staying in synch with the model object? It 
> > looks like "pop" is just adding an element to an array at
> element 0,
> > so I would think that it would be putting it there by
> reference. But
> > the "add" method of ArrayList (which CompoundRoot extends)
> does call
> > "arraycopy", which might be what's causing things (perhaps) to be 
> > copied by value instead of reference. Not sure, though, if that's 
> > what's causing the overall problem.
> > 
> > Thanks,
> > 
> > Drew
> > 
> > 
> > 
> > -------------------------------------------------------
> > This SF.Net email sponsored by: ApacheCon 2003,
> > 16-19 November in Las Vegas. Learn firsthand the latest developments 
> > in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more!
> > http://www.apachecon.com/
> > _______________________________________________
> > Opensymphony-webwork mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> > 
> 
> 
> 
> 
> -------------------------------------------------------
> This SF.Net email sponsored by: ApacheCon 2003,
> 16-19 November in Las Vegas. Learn firsthand the latest developments 
> in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! 
> http://www.apachecon.com/ 
> _______________________________________________
> Opensymphony-webwork mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> 




-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/
_______________________________________________
Opensymphony-webwork mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork

Reply via email to