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<nil...@gmail.com> wrote:
> Did you try request.getSession().setAttribute("RedirectHelpForm",
> redirectHelpForm)?
>
> Nils-H
>
> On Thu, Jun 25, 2009 at 7:14 AM, Sam Wun<swun2...@gmail.com> 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<nil...@gmail.com> 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<swun2...@gmail.com> 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: 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
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> 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
>
>

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

Reply via email to