That does indeed seem a little odd... The portlet framework expects
these parameters, so I'm not sure there is a way around it. Did you
try upgrading to 2.1.6?

Nils-H

On Thu, Apr 16, 2009 at 4:26 PM, Stephen Turner <stur...@mit.edu> wrote:
> Hello all -
>
> We've had some trouble using Struts 2 portlets (2.0.14) with Oracle Portal,
> and I wondered if anyone else had used this combination successfully.
>
> The problems occur with portlets that have a form and submit buttons, and
> the issue seems to be that Struts uses render parameters to pass information
> (like action name) from the event phase to the render phase. Oracle Portal
> keeps these values in the generated URL for the form action, and so they
> persist for longer than Struts is expecting them to.
>
> An aside - this is also an issue with straight JSR 168 portlets in the
> Oracle portal, but we can work around this by using session attributes to
> pass data from event to render, rather than render params. However, as
> Struts uses render params internally to figure out which action to invoke,
> there's no similar workaround for Struts. I suspect the problem is in the
> Oracle portal - the JSR 168 spec seems to indicate that render params are
> for passing data from event phase to render phase, but I wanted to see if
> anyone was aware of the issue and if there is a workaround. This all works
> perfectly when running in Pluto.
>
> Here's an illustration of the problem - we are using a "redirectAction" to
> get from event to render.
>
> I have a simple Struts action class "StrutsTest" which has these methods:
>
>        public String execute();   // implements event phase processing
>        public String doView();    // implements render phase processing
>
> These methods do nothing except logging.
>
> My form has a single text input field called "pie" and a single submit.
> Here's the relevant part of the struts config:
>
>  <action name="init">
>     <result name="success">/WEB-INF/view/index.jsp</result>
>  </action>
>
>  <action name="StrutsTestAction" class="struts2hello.StrutsTest">
>   <result name="input">/WEB-INF/view/index.jsp</result>
>   <result name="success" type="redirectAction" >
>     <param name="actionName">StrutsTestRender</param>
>     <param name="portletMode">view</param>
>     <param name="pie">${pie}</param>
>   </result>
>  </action>
>
>  <action name="StrutsTestRender" class="struts2hello.StrutsTest"
> method="doView">
>   <result name="success">/WEB-INF/view/index.jsp</result>
>  </action>
>
> Here's what happens, step by step:
>
> *** 1. First display. "init" action is invoked, which simply forwards to the
> jsp. The form action url has this in it:
>
>  struts.portlet.action%3D%252Fview%252FStrutsTestAction%26struts.portlet.mode%3Dview
>
> *** 2. I enter "apple" in the pie field and submit. The event phase mthod
> (execute) receives the value correctly and form is redisplayed .
>
> Logging shows this:
>
> 2009-04-16 09:32:31,581 INFO struts2hello.StrutsTest.execute - Begin execute
> 2009-04-16 09:32:31,583 INFO struts2hello.StrutsTest.execute - End execute
> 2009-04-16 09:32:31,765 INFO struts2hello.StrutsTest.doView - Begin doView
> A. Pie = apple
> 2009-04-16 09:32:31,767 INFO struts2hello.StrutsTest.doView - doView B.
> Phase: RENDER
> 2009-04-16 09:32:31,768 INFO struts2hello.StrutsTest.doView - End doView
>
> This is all correct - the event phase action is invoked, and then the render
> phase action (doView method) is invoked and the phase (from
> PortletActionContext) is RENDER.
>
> But, on redisplay, the form action URL now has this embedded:
>
> pie%3Dapple%26struts.portlet.action%3D%252Fview%252FStrutsTestRender%26struts.portlet.mode%3Dview%26struts.portlet.eventAction%3Dtrue
>
> AND
>
> struts.portlet.action%3D%252Fview%252FStrutsTestAction%26struts.portlet.mode%3Dview
>
> I believe this is where things start to go wrong - Oracle has put the render
> parameters (action name of "StrutsTestRender" and pie of "apple") into the
> generated action url, and subsequent submits will see these parameters.
>
> *** 3. Entering "cherry" into the pie field and submitting again shows this
> in the log:
>
> 2009-04-16 09:33:40,502 INFO struts2hello.StrutsTest.doView - Begin doView
> A. Pie = apple, cherry
> 2009-04-16 09:33:40,505 INFO struts2hello.StrutsTest.doView - doView B.
> Phase: EVENT
> 2009-04-16 09:33:40,508 INFO struts2hello.StrutsTest.doView - End doView
>
> So we've now gone directly into the render method, but we're in the event
> phase. Presumably because of struts.portlet.action value of
> "StrutsTestRender" in the form's action URL.
>
> Also we now have both "apple" and "cherry" in the "pie" parameter values:
> "apple" from being embedded in the URL, "cherry" from being entered in the
> form.
>
>
>
> --
> Stephen Turner
> Senior Programmer/Analyst - SAIS
> MIT IS&T
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to