Java Struts 1:从动作转向动作。 通过ActionForms传递数据

我们一直在尝试从一个动作重定向到另一个动作,希望数据将在相应的ActionForm bean之间传递。 第一个操作接收来自浏览器的请求,打印数据字段,并将其转发到另一个操作,该操作打印相同的字段并重定向到JSP。

问题是ActionTo打印的值不正确 – 它的commonInt默认值为0 ,而我们预计值为35

这是一个代表示例:

 public class ActionFrom extends DispatchableAction{ public ActionForward send(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){ FormA formA = (FormA)form; formA.commonInt = 35; System.out.println("sent: "+formA.commonInt); return mapping.findForward("send"); } } public class ActionTo extends DispatchableAction{ public ActionForward recv(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){ FormB formB = (FormB)form; System.out.println("recv= "+formB.commonInt); return mapping.findForward("send"); } } 

而actionForms是:

 public class FormA extends ActionForm { public int intA; public int commonInt; } public class FormB extends ActionForm{ public int intB; public int commonInt; } 

映射:

       

有办法实现这个目标吗? 或者两种forms都应该相同?

我们尝试的解决方法是通过请求传递内容,但它可能会变得庞大而混乱。

实现此目的的方法是对两个操作使用相同的actionform。 是否有特定原因需要两种不同的动作forms? 如果没有尝试修改第二个动作映射到name =“formA”,并且动作本身使用FormA而不是FormB。

汤姆,使用你的解决方案并结合ActionRedirect ,由Vincent Ramdhanie建议,我也得到了你想要的东西。

代码很简单,它允许您为每个Action分别使用表单。

 ActionRedirect redirect = new ActionRedirect(mapping.findForward("send")); redirect.addParameter("commonInt", formA.getCommonInt()); return redirect; 
 formB.setCommonInt(request.getParameter("commonInt")); 

这样可以节省我的时间并帮助我不要在JSP中直接更改它,这将是非常糟糕的。

听起来这可能会变得混乱,我会保持这个简单,只使用ActionForm来存储Request数据。

 public class FormA extends ActionForm { public int intA; public int commonInt; } 

提交Request将数据从ActionForm取出,然后直接将其填入会话中,或者将其填充到会话中的数据持有者中以维护此类信息。

 public class ActionTo extends DispatchableAction { public ActionForward recv(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) { FormA form = (FormA)form; DataHolder dataHolder = request.getSession().getAttribute("dataHolder"); dataHolder.setCommonInt(commonInt); dataHolder.setIntA(intA); return mapping.findForward("send"); } } 

理想情况下,如果你没有大量投资Struts 1,我会看一下Struts 2。