JavaのStrutsの1:アクションからアクションに転送します。 ActionFormsを介してデータを渡します
質問
私たちは、データが対応する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");
}
}
およびActionFormはあります:
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>
これを実現する方法はありますか?または両方の形が同じである必要があります?
私たちがしようとした問題を回避するには、リクエストを通じて物事を渡すことだったが、それは大規模かつ厄介取得することができます。
解決
これを実現するための方法は、両方のアクションに同じのActionFormを使用することです。あなたは二つの異なるactionformsを必要とする特別な理由はありますか?そうでない場合は、むしろFormBよりもフォームAを使用するには、名前=「フォーマ」とアクション自体に2つ目のアクションマッピングを変更してみます。
他のヒント
トム、あなたのソリューションを使用して ActionRedirect には、ヴィンセントRamdhanieによって提案され、私はあなたがあまりにも欲しいものだ。
のコードはそのように簡単であり、それはあなたがそれぞれの行動のための分離のフォームを持つことができます。
ActionRedirect redirect = new ActionRedirect(mapping.findForward("send"));
redirect.addParameter("commonInt", formA.getCommonInt());
return redirect;
formB.setCommonInt(request.getParameter("commonInt"));
これが私の一日の保存とひどいことだろうか、JSPに直接それを変更するための努力を持っていない私を助けアップendendます。
が、これは厄介得ることができるように、私はこのシンプルに保つだけ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を見てみると思います。