ストラット 2:アクション間のパラメータ
-
16-09-2019 - |
質問
次のような質問があります。フォームを終了し、アクションがフォームの値を保存するときにパラメーター(たとえば ID )を渡す必要があります。これは結果 = "成功" に転送され、成功で呼び出されるアクションにはこの情報を保存するために次のフォームで後で使用する ID およびその他のパラメーター (info-form2 および info.form1)...
例えば:
FORM1 (ユーザー) ==== "成功" ====> FORM2 (アドレス)
userForm.html ===================> addressForm.html?user_id=X ...(X :UserAction (メソッド:save) のスローを AddressAction (メソッド:newAddress) に渡した ID)
よろしくお願いします。
前もって感謝します
解決
「転送」という単語を使用しましたが、アドレスに関する詳細情報を収集するために新しいページ (address.html) に移動したいようです。この場合、ユーザーのアクションが完了した後、アドレス ページにリダイレクトする必要があります。
<action name="user" class="UserAction">
<!-- Redirect to another namespace -->
<!-- for Struts 2.2 --> <result type="redirectAction">
<!-- for Struts 2.0 <result type="redirect-action"> -->
<param name="actionName">collect-address</param>
<param name="userId">${userId}</param>
</result>
</action>
${userId} 構文は、UserAction で getUserId を呼び出し、質問で示したようにそのパラメーターを渡します。addressForm.html?user_id=X。collect-address は、addressForm.html に送信される成功結果を持つことができます。 ドキュメントはこちら。 別のアクションの使用を避けたい場合は、次のことを試してください。 結果タイプ = "リダイレクト" を使用する そして物事をそのように通過させます。
本当に転送したい場合は、次を使用できます アクションの連鎖. 。これは Struts2 チームの Ted Husted に落胆された しかし、それはあなたにとってはうまくいくかもしれません。
アクション チェーンの代わりに、このリクエストを完了するためのすべてのコードを 1 つのアクションにまとめ、ユーザーとアドレスのヘルパー クラスまたはサービス クラスを使用して、「アクション チェーン」の代わりにコードを分離して再利用するようにしてください。
他のヒント
何をしたいのかあまり明確ではありません。
アクションが正常に実行された後、リクエストは別のアクションに転送されるようです。最初のアクションではパラメータ ID を渡し、それを 2 番目のアクションで使用します。両方のアクションが同じリクエスト呼び出しで使用されるため、次のようにリクエストに ID パラメータを保存できます。
request.setAttribute("ID", iDValueObject);
2 番目のアクションでは、次のように ID の値を抽出できます。
request.getAttribute("ID");
これは機能するはずです:
<!-- Package Default -->
<package name="**default**" extends="struts-default,json-default" namespace="/">
<action name="noOp" class="com.web.myapp.action.NoOpAction">
<result name="success" type="chain">
<param name="requiresValidation">true</param>
<param name="actionName">userAuthentication</param>
<param name="namespace">/user</param>
</result>
</action>
</package>
<!-- Package User -->
<package name="user" extends="struts-default,json-default" namespace="/user">
<action name="userAuthentication" class="com.web.myapp.action.AuthenticateAction">
...
</action>