我们一直在尝试从一个操作重定向到另一个操作,希望数据能够在相应的操作之间传递ActionForm
豆子。第一个操作接收来自浏览器的请求,打印数据字段,并将其转发到另一个操作,该操作打印相同的字段并重定向到 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");
}
}
动作形式是:
public class FormA extends ActionForm {
public int intA;
public int commonInt;
}
public class FormB extends ActionForm{
public int intB;
public int commonInt;
}
映射:
<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>
有办法做到这一点吗?或者两种形式应该相同?
我们尝试的解决方法是通过请求传递内容,但它可能会变得又大又乱。
汤姆,使用你的解决方案并结合动作重定向 http://struts.apache.org/1.x/apidocs/org/apache/struts/action/ActionRedirect.html,文森特·拉姆丹尼(Vincent Ramdhanie)建议,我也得到了你想要的东西。
代码很简单,它允许您为每个操作创建单独的表单。
ActionRedirect redirect = new ActionRedirect(mapping.findForward("send"));
redirect.addParameter("commonInt", formA.getCommonInt());
return redirect;
formB.setCommonInt(request.getParameter("commonInt"));
这最终节省了我的时间,并帮助我不必费力直接在 JSP 中进行更改,那会很糟糕。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)