One small tangent on why you might still want to call session.setAttribute. If
you ever want your app to work in a clustered/distributed environment, you
should always call session.setAttribute after modifying the state of a session
attribute. It may seem redundant:

Address address = ...;
Object customer = session.getAttribute(Constants.CUSTOMER_KEY);
PropertyUtils.setProperty(customer, "address", address);
session.setAttribute(Constants.CUSTOMER_KEY, customer);

but it's really the simplest way for a container to determine that an attribute
has been added or changed and should be replicated.

Quoting "Mainguy, Mike" <[EMAIL PROTECTED]>:

> Welll,
>   Common misconception, but, technically all java calls are "by value".
> That is, there is no such thing in java as passing something "by
> reference".
> The hook is, the value passed in when something is an Object is actually a
> reference (aka a pointer) to the existing object.  
> While you can manipulate the thing that this points to, you cannot reassign
> it point to something else.  I got all bunged up about this also and I
> think
> it's a pretty important point that can easily be missed if you came into
> java from another language that allows "by reference" calls.
> 
> By saying that objects are passed "by reference" folks are actually making
> things more complicated than they need to be...  For a really good
> explanation see http://www.yoda.arachsys.com/java/passing.html
> 
> 
> 
> worse is better 
> 
> -----Original Message-----
> From: Larry Meadors [mailto:[EMAIL PROTECTED] 
> Sent: Monday, December 01, 2003 10:52 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Question regarding ActionForms.
> 
> 
> Welcome to java 101, formerly known as the struts-users mailing list.
> 
> Object references are passed to method calls. While that reference cannot
> be
> changed, the object that it references can. On the other hand, if you
> create
> a new action form and assign it to the "form" parameter, nothing will
> happen
> because that reference cannot be changed.
> 
> Larry
> 
> >>> [EMAIL PROTECTED] 12/01/03 8:42 AM >>>
> Hi,
> 
> I am currently using Struts 1.0.2 and have notice something with regard to
> handling of ActionForms.
> 
> Why is it, that in the "perform()" method of my Action I am able to modify
> the passed-in ActionForm and all modifications that I make to the
> ActionForm
> in my Action have effect on the ActionForm in the session, without the need
> to reset the modified form in the session. e.g.
> 
> public ActionForward peform(ActionMapping mapping,
>                             ActionForm form,
>                             HttpServletRequest request,
>                             HttpServletResponse response,
>                             )throws IOException, ServletException
> 
> {
>       MyForm myForm = (MyForm)form;
> 
>       form.setMemberA("valA");
>       form.setMemberB("valB");
> 
>       // why dont I have to do the following: session.setAttribute
> ("myFormName", myForm);
> 
>       return "success";
> 
> }
> 
> I thought that since Java passes method arguments by value and not by
> reference, then I would have to reset my modifed copy back into the session
> for changes on the form to be visible in the form in the session ?
> 
> Any insights on how this mechanism works would be greatly appreciated.
> 
> Thanks,
> 
> Sepand

-- 
Kris Schneider <mailto:[EMAIL PROTECTED]>
D.O.Tech       <http://www.dotech.com/>

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

Reply via email to