ParameterInterceptor is only there to set properties from the Parameter map (in WW2 
this is the parameters from the HttpRequest).

If you're chaining and want to set the properties from one action to the next, you 
want the ChainingInterceptor.

> -----Original Message-----
> From: Gordon Smith [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, December 02, 2003 8:18 PM
> To: [EMAIL PROTECTED]
> Subject: [OS-webwork] ParameterInterceptor trouble
> 
> 
> I have a question about ParameterInterceptor. Is it expected 
> behaviour to limit the parameters that are to be chained from 
> one action to another to those in the HTTP request and to not 
> allow updates to the parameter values outside of the HTTP 
> request, say, from an action prior to a chain?
> 
> The investigation layed out below started when the 
> getId/setId methods in an action were not called during a 
> chain. webwork and xwork jars were updated from CVS 
> 2003-12-02 (beta2).
> 
> 
> I have a form used to create a new entity that calls 
> DatabaseAdminAction.doCreate():
> 
>     <action
>         name="databaseCreate"
>         class="com.hp.sdfp.tracedata.webwork.DatabaseAdminAction"
>         method="doCreate"
>     >
>         <result name="exit" type="chain">
>             <param name="actionName">databasesAdmin</param>
>         </result>
>         <result name="input" type="dispatcher">
>             <param 
> name="location">/templates/adminDatabaseCreate.vm</param>
>         </result>
>         <result name="success" type="chain">
>             <param name="actionName">databaseEdit</param>
>         </result>
>         <interceptor-ref name="authStack"/>
>     </action>
> 
> authStack interceptor is defaultStack + authentication.
> 
> 
> Upon entity creation, after a database write, this.setId() is 
> called (with new entity database id), SUCCESS is returned and 
> control is chained to DatabaseAdminAction.doEdit() as expected:
> 
>     <action
>         name="databaseEdit"
>         class="com.hp.sdfp.tracedata.webwork.DatabaseAdminAction"
>         method="doEdit"
>     >
>         <result name="exit" type="chain">
>             <param name="actionName">databasesAdmin</param>
>         </result>
>         <result name="input" type="dispatcher">
>             <param 
> name="location">/templates/adminDatabaseEdit.vm</param>
>         </result>
>         <interceptor-ref name="authStack"/>
>     </action>
> 
> 
> HERE IS THE TROUBLING PART. doEdit() fails and exits, because 
> the "id" property isn't set. Here are the methods in 
> DatabaseAdminAction that would like to participate:
> 
>     private String _id = null;
> 
>     public String getId() { return( _id ); }
>     
>     public void setId( String id ) { _id = id; } 
> 
> 
> The log shows that all other local "properties" are passed, 
> except for "id" (3rd from last line):
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.opensymphony.xwork.ActionChainResult DEBUG - Chaining to 
> action databaseEdit
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.opensymphony.xwork.DefaultActionProxy DEBUG - Creating an 
> DefaultActionProxy for namespace  and action name databaseEdit
> 
> [2003-12-02 16:07:30,890] Thread-3 
> org.springframework.beans.factory.xml.XmlBeanFactory DEBUG - 
> Returning 
> cached instance of singleton bean 'components'
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.hp.sdfp.tracedata.interceptors.AuthorizationInterceptor 
> INFO  - AUTH: 
> app.security is off
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.opensymphony.xwork.interceptor.LoggingInterceptor INFO  - 
> Starting 
> 
> execution stack for action databaseEdit
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.opensymphony.xwork.interceptor.StaticParametersInterceptor
>  DEBUG - 
> 
> Setting static parameters {}
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.opensymphony.xwork.interceptor.ParametersInterceptor 
> DEBUG - Setting 
> params {active=[Ljava.lang.String;@170984c, 
> doUpdate=[Ljava.lang.String;@11ed166, 
> referenceUrl=[Ljava.lang.String;@45aa2c, 
> commentUrl=[Ljava.lang.String;@1a734ff, 
> name=[Ljava.lang.String;@886ad0}
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.opensymphony.xwork.DefaultActionInvocation INFO  - 
> Executing action 
> method = doEdit
> 
> [2003-12-02 16:07:30,890] Thread-3 
> com.hp.sdfp.tracedata.webwork.DatabaseAdminAction DEBUG - 
> DatabaseAdminAction.doEdit()
> 
> 
> I also suspect action errors are not chained either, as they 
> aren't showing up in the view, but I haven't looked at that yet.
> 
> 
> ATTEMPTED WORKAROUNDS:
> 
> Changed getId() to getChainId() and setId() to setChainId(). 
> No change. No additional get/set methods are chained, 
> regardless of name.
> 
> 
> I notice that 
> com.opensymphony.xwork.interceptor.ParametersInterceptor.befor
> e() calls ActionContext.getContext().getParameters(). If the 
> comments for getParameters() can be believed, the action is 
> not consulted to determine chained parameters:
> 
>     /**
>      * Returns a Map of the HttpServletRequest parameters 
> when in a servlet
>      * environment or a generic Map of parameters otherwise.
>      *
>      * @return Map of HttpServletRequest parameters, generic 
> Map of parameters or
>      * multipart Map.
>      */
>     public Map getParameters() {
>         return (Map) get(PARAMETERS);
>     }
> 
> 
> Tried to include the parameter manually in doCreate():
> 
>     java.util.Map params = ActionContext.getContext().getParameters();
>     params.put( "id", getId() )
>     ActionContext.getContext().setParameters( params );
> 
> but that isn't allowed:
> 
>     java.lang.IllegalStateException: Cannot find message 
> associated with key 'parameterMap.locked'
> 
> 
> Changed create URL to include a dummy "id" value:
> 
>     "databaseCreate.action?id=666"
> 
> This, and a hidden form variable, cause the "id" variable to 
> be chained successfully. However, the value that is chained 
> is the ORIGINAL PARAMETER VALUE! (Not totally unexpected 
> after seeing how ActionContext is used). The log shows the 
> original id value (666) was injected into the new action 
> instead of the new value(21) (see last line):
> 
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.hp.sdfp.tracedata.webwork.DatabaseAdminAction DEBUG - setId(21)
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.hp.sdfp.tracedata.webwork.DatabaseAdminAction DEBUG - 
> 6.1.2 action id = 21
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.opensymphony.xwork.ActionChainResult DEBUG - Chaining to 
> action databaseEdit
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.opensymphony.xwork.DefaultActionProxy DEBUG - Creating an 
> DefaultActionProxy for namespace  and action name databaseEdit
> 
> [2003-12-02 17:18:27,593] Thread-2 
> org.springframework.beans.factory.xml.XmlBeanFactory DEBUG - 
> Returning cached instance of singleton bean 'components'
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.hp.sdfp.tracedata.interceptors.AuthorizationInterceptor 
> INFO  - AUTH: app.security is off
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.opensymphony.xwork.interceptor.LoggingInterceptor INFO  - 
> Starting execution stack for action databaseEdit
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.opensymphony.xwork.interceptor.StaticParametersInterceptor
>  DEBUG - Setting static parameters {}
> 
> [2003-12-02 17:18:27,593] Thread-2 
> com.opensymphony.xwork.interceptor.ParametersInterceptor 
> DEBUG - Setting params {active=[Ljava.lang.String;@9dca26, 
> doUpdate=[Ljava.lang.String;@1429cb2, 
> referenceUrl=[Ljava.lang.String;@3da850, 
> commentUrl=[Ljava.lang.String;@1f51e5c, 
> name=[Ljava.lang.String;@19c6163, id=[Ljava.lang.String;@1bdbfec}
> 
> [2003-12-02 17:18:27,609] Thread-2 
> com.hp.sdfp.tracedata.webwork.DatabaseAdminAction DEBUG - setId(666)
> 
> 
> QUESTION: Is this the desired behaviour? Webwork1 seems to 
> handle this as expected by passing and Java bean type 
> parameters. How can the parameter value be updated for a 
> chain in xwork? 
> 
> 
> PS:
> 
> Using
> 
>     ActionContext.getContext().getSession().put( "createId", 
> getId() );
> 
> in doCreate() and:
> 
>     setId( ( String 
> )ActionContext.getContext().getSession().get( "createId" ) );
> 
> in doEdit() gets me by for now.
> 
> 
> Thank for your assistance.
> 
> __________________________________________________________________
> McAfee VirusScan Online from the Netscape Network. 
> Comprehensive protection for your entire computer. Get your 
> free trial today! 
> http://channels.netscape.com/ns/computing/mcafee/index.jsp?pro
mo=393397

Get AOL Instant Messenger 5.1 free of charge.  Download Now! 
http://aim.aol.com/aimnew/Aim/register.adp?promo=380455


-------------------------------------------------------
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