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

Reply via email to