JavaのStrutsの1:アクションからアクションに転送します。 ActionFormsを介してデータを渡します

StackOverflow https://stackoverflow.com/questions/849051

  •  21-08-2019
  •  | 
  •  

質問

私たちは、データが対応する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を見てみると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top