Sounds like a winner -- open a jira request and we'll get on it

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Fred Lamuette
Sent: Monday, November 24, 2003 9:47 AM
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

Reply via email to