I just tried your suggestion,
it doesn't work.
The page flow is:
RedirectAction -> RedirectHelpAction -> RedirectStep3Action
Here is the RedirectAction.java file:
import org.apache.commons.logging.LogFactory;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/** @struts.action name="RedirectForm" path="/struts_redirect_portlet/input"
* attribute="redirectForm"
* scope="session"
* input="/portlet/struts_redirect_portlet/input.jsp"
*
* @struts.action-forward name="input"
path="/portlet/struts_redirect_portlet/input.jsp" redirect="false"
* @struts.action-forward name="help"
path="/portlet/struts_redirect_portlet/help.jsp" redirect="false"
*/
public class RedirectAction extends PortletAction {
public ActionForward execute(
ActionMapping mapping, ActionForm form,
HttpServletRequest req,
HttpServletResponse res)
throws Exception {
RedirectForm redirectForm = (RedirectForm) form;
String comment = redirectForm.getComment().trim();
if ( comment.length() > 0) {
return mapping.findForward("help");
}
return mapping.findForward("input");
}
public ActionForward render(
ActionMapping mapping, ActionForm form,
PortletConfig config,
RenderRequest req, RenderResponse res)
throws Exception {
return mapping.findForward("input");
}
}
Here is the RedirectHelpAction.java file:
import javax.servlet.http.HttpServletResponse;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/***
* @struts.action name="RedirectHelpForm" path="/struts_redirect_portlet/help"
* attribute="redirectHelpForm"
* scope="session"
* input="/portlet/struts_redirect_portlet/help.jsp"
* @struts.action-forward name="help"
path="/portlet/struts_redirect_portlet/help.jsp" redirect="false"
* @struts.action-forward name="step3"
path="/portlet/struts_redirect_portlet/step3.jsp" redirect="false"
*/
public class RedirectHelpAction extends PortletAction {
public ActionForward execute(
ActionMapping mapping, ActionForm form,
HttpServletRequest req,
HttpServletResponse res)
throws Exception {
RedirectHelpForm redirectHelpForm = (RedirectHelpForm) form;
req.getSession().setAttribute("RedirectHelpForm",
redirectHelpForm);
String name = redirectHelpForm.getName().trim();
if ( name.length() > 0) {
return mapping.findForward("step3");
}
return mapping.findForward("help");
}
public ActionForward render(
ActionMapping mapping, ActionForm form,
PortletConfig config,
RenderRequest req, RenderResponse res)
throws Exception {
return mapping.findForward("help");
}
}
On Thu, Jun 25, 2009 at 3:47 PM, Nils-Helge Garli
Hegvik<[email protected]> wrote:
> Did you try request.getSession().setAttribute("RedirectHelpForm",
> redirectHelpForm)?
>
> Nils-H
>
> On Thu, Jun 25, 2009 at 7:14 AM, Sam Wun<[email protected]> wrote:
>> How to do that with session?
>> I am currently setting it in the execute() and render method with the
>> following code:
>> req.setAttribute("RedirectHelpForm", redirectHelpForm);
>>
>> but this is for request rather than session?
>>
>> Thanks for the suggesion.
>> sam
>>
>> On Thu, Jun 25, 2009 at 3:09 PM, Nils-Helge Garli
>> Hegvik<[email protected]> wrote:
>>> Haven't looked very deeply into it, but could it be that you're
>>> setting the attribute in the action phase, and trying to access it in
>>> the render phase? That won't work. In that case, you have to set it as
>>> a session attribute, or set some kind of id as a render parameter and
>>> re-fetch the object in the render phase.
>>>
>>> Nils-H
>>>
>>> On Thu, Jun 25, 2009 at 7:03 AM, Sam Wun<[email protected]> wrote:
>>>> Hi,
>>>>
>>>> I noticed the setAttribute() method is called too late in one of my
>>>> Action class:
>>>>
>>>> import javax.portlet.PortletConfig;
>>>> import javax.portlet.RenderRequest;
>>>> import javax.portlet.RenderResponse;
>>>>
>>>> import org.apache.struts.action.ActionForm;
>>>> import org.apache.struts.action.ActionForward;
>>>> import org.apache.struts.action.ActionMapping;
>>>>
>>>> /***
>>>> * @struts.action name="RedirectHelpForm"
>>>> path="/struts_redirect_portlet/help"
>>>> * attribute="redirectHelpForm"
>>>> * scope="session"
>>>> * input="/portlet/struts_redirect_portlet/help.jsp"
>>>> * @struts.action-forward name="help"
>>>> path="/portlet/struts_redirect_portlet/help.jsp" redirect="false"
>>>> * @struts.action-forward name="step3"
>>>> path="/portlet/struts_redirect_portlet/step3.jsp" redirect="false"
>>>> */
>>>>
>>>> public class RedirectHelpAction extends PortletAction {
>>>>
>>>> public ActionForward execute(
>>>> ActionMapping mapping, ActionForm form,
>>>> HttpServletRequest req,
>>>> HttpServletResponse res)
>>>> throws Exception {
>>>> RedirectHelpForm redirectHelpForm = (RedirectHelpForm) form;
>>>> req.setAttribute("RedirectHelpForm", redirectHelpForm);
>>>>
>>>> String name = redirectHelpForm.getName().trim();
>>>> if ( name.length() > 0) {
>>>> return mapping.findForward("step3");
>>>> }
>>>>
>>>> return mapping.findForward("help");
>>>> }
>>>>
>>>>
>>>> public ActionForward render(
>>>> ActionMapping mapping, ActionForm form,
>>>> PortletConfig config,
>>>> RenderRequest req, RenderResponse res)
>>>> throws Exception {
>>>> RedirectHelpForm redirectHelpForm = (RedirectHelpForm) form;
>>>> req.setAttribute("redirectHelpForm", redirectHelpForm);
>>>>
>>>> return mapping.findForward("help");
>>>> }
>>>> }
>>>>
>>>> The consequence of that is resulting a "cannot find bean in any scope".
>>>>
>>>> Actully when the page is died on this reason, I press the back button
>>>> of the browser go back to the previous page, and then pressed the
>>>> Submit button again, the error would go disappear, because the
>>>> RedirectHelpForm bean is alerady populated in the class
>>>> RedirectHelpAction, however not in the class RedirectAction.
>>>> The code of RedirectAction is shown as below:
>>>>
>>>> /** @struts.action name="RedirectForm"
>>>> path="/struts_redirect_portlet/input"
>>>> * attribute="redirectForm"
>>>> * scope="session"
>>>> * input="/portlet/struts_redirect_portlet/input.jsp"
>>>> *
>>>> * @struts.action-forward name="input"
>>>> path="/portlet/struts_redirect_portlet/input.jsp" redirect="false"
>>>> * @struts.action-forward name="help"
>>>> path="/portlet/struts_redirect_portlet/help.jsp" redirect="false"
>>>> */
>>>> public class RedirectAction extends PortletAction {
>>>>
>>>> public ActionForward execute(
>>>> ActionMapping mapping, ActionForm form,
>>>> HttpServletRequest req,
>>>> HttpServletResponse res)
>>>> throws Exception {
>>>>
>>>> RedirectForm redirectForm = (RedirectForm) form;
>>>> // req.setAttribute("redirectForm", redirectForm);
>>>>
>>>> String comment = redirectForm.getComment().trim();
>>>> if ( comment.length() > 0) {
>>>> return mapping.findForward("help");
>>>> }
>>>>
>>>> return mapping.findForward("input");
>>>>
>>>> }
>>>>
>>>>
>>>> public ActionForward render(
>>>> ActionMapping mapping, ActionForm form,
>>>> PortletConfig config,
>>>> RenderRequest req, RenderResponse res)
>>>> throws Exception {
>>>>
>>>> return mapping.findForward("input");
>>>> }
>>>> }
>>>>
>>>> Can anyone tell me how to pre-setAttribute for an upcoming Form in an
>>>> Action class?
>>>> It sounds weried. but I couldn't find a way to get rid of the error.
>>>>
>>>> Thanks
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]