I think it's a good idea to have a flag on the ActionTag for whether it should include the request parameters or not... Please add this as a Jira issue.
What did WW 1.x do? Jason > -----Original Message----- > From: Fred Lamuette [mailto:[EMAIL PROTECTED] > Sent: Monday, November 24, 2003 12:47 PM > To: [EMAIL PROTECTED] > Subject: [OS-webwork] Why ActionTag is dangerous... > > > I've created a component that renders a configurable tabs bar. > > >#bodytag(Action "name='tabs'" "id=tabs") > > #param("tabsId" "$tabsId") > > #param("activeTab" "$activeTab") > >#end > > > >#bodytag(Push "value=#tabs") > ><div class="tabs" align="left"> > > <table cellpadding="3" cellspacing="0" border="0"> > > <tr> > > #foreach($tabItem in $tabs) > > #if($tabItem.selected) > > <th title="$!tabItem.title">$tabItem.label</th> > > #else > > <td title="$!tabItem.title"><a > href="#bodytag(URL > "value='$tabItem.url'") #if($tabItem.paramName) > #param>>("$tabItem.paramName" "$paramValue") #end #end > ">$tabItem.label</td> > > #end > > #end > > </tr> > > </table> > ></div> > >#end > > I call it from a velicity view > > > #bodytag(Component "template=tabs.vm") > > #param( "tabsId" "issue") > > #param( "activeTab" "owner") > > #param( "paramValue" "id" true) > > #end > > #bodytag(Form ...) > > #tag(Hidden "name='id'" "value=id") > > ... > > #end > Everything is ok. Except one thing. I put this component at > the top of a form and here is the chronology that leads to > the problem : > > 1/ I'm creating a new entity (hidden field id=null) by > fulfilling my form 2/ I submit it 3/ ParametersInterceptor > populates my action, actually my model class. 4/ After > validating everything, I store the model class in the db and > chains to the velocity view that shows again the fulfilled > form with a message "creation successful" 5/ In this page, > the hidden field id is still null !! Whereas after leaving > the action, everything was ok and the id was generated and > stored in the db. > > Why? > Because of the tabs action that is called just before > populating the form and that implicitly calls the > ParametersInterceptor (its necessary because fields from tabs > action (tabsId, activeTab) must be populated this way). > Instead of using a list of two parameters (those from the > declared #param within of the component ->tabsId and > activeTab ) to populate the tabs action, the > ParametersInterceptor uses moreover the input parameters from > the form -> id, name, ...), so the field id of my model class > is reset to null !!!!! > > Ok, that was a tedious example that just illustrates that > using ActionTag can be very vicious. I was very surprised > that action tag creates an extra context with the previous > parameters and not only those provided by the param > directive. Maybe because I'm not a WebWork man, I'm just > switching from struts to WW2, but I think it can be very > dangerous and can raise surprising and long-time-to-debug bugs. > > Here is my proposal. Add just a parameter to indicate to > include or not the parameters from the current context, with > a default behavior. It's just a simple swith to add in the > createExtraContext() method, to add or not the > ActionContext.getContext().getParameters(). > > #bodytag(Action "name='tabs'" "id=tabs" > "includeCurrentContext=false") // Maybe a little bit too long > as an attribute name > #param("tabsId" "$tabsId") > #param("activeTab" "$activeTab") > #end > > What is your feedback, guys ? > > Richard HALLIER > Chef de projet > [EMAIL PROTECTED] > 01.40.12.41.52 > www.uniclick.org > UNICLICK > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: SF.net Giveback Program. > Does SourceForge.net help you be more productive? Does it > help you create better code? SHARE THE LOVE, and help us > help YOU! Click Here: http://sourceforge.net/donate/ > _______________________________________________ > Opensymphony-webwork mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork > ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/ _______________________________________________ Opensymphony-webwork mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork