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

Tom*_*Tom 14 java struts-1

我们一直在尝试从一个动作重定向到另一个动作,希望数据将在相应的ActionFormbean 之间传递.第一个操作接收来自浏览器的请求,打印数据字段,并将其转发到另一个操作,该操作打印相同的字段并重定向到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");
    }
}
Run Code Online (Sandbox Code Playgroud)

而actionForms是:

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

public class FormB extends ActionForm{
    public int intB;
    public int commonInt;
}
Run Code Online (Sandbox Code Playgroud)

映射:

<action path="/from" type="EXPERIMENT.ActionFrom" name="formA" scope="request"
      input="something.jsp" parameter="dispatch" unknown="false" validate="false">
 <forward  name="send" path="/to.do?dispatch=recv" redirect="false"/>
</action>

 <action path="/to" type="EXPERIMENT.ActionTo" name="formB"  scope="request"
      input="something.jsp" parameter="dispatch" unknown="false" validate="false">
      <forward name="send" path="/login.do"  redirect="false"/>
 </action>
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?或者两种形式都应该相同?

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

luc*_*uda 10

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

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

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

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


Vin*_*nie 6

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

  • 在那种情况下,您可能希望查看Actionredirect类.您可以添加要发送到下一个操作的参数.自struts 1.2.7. (3认同)