ホーム » ブログ » struts2でchainとredirectActionの区別
このエントリーをはてなブックマークに追加
@2013/01/04

スポンサーリンク
Result Typeは大別すると、HTMLなどデータを生成するタイプと、他のActionを呼び出したりリダイレクトを行ったりする遷移タイプに分かれます。
Struts2を使っているとアクションからアクションへ遷移したい場合があります。その時使うのが、redirect又はchainになります。
なお、redirect と chain の大きな違いはあります。
本記事では、struts2で遷移する際よく使われているchainとredirectを詳しく説明します。
早速ですが、コードを見てみましょう。
<action name="redirectAndChainSampleAction" class="jp.baido.SampleAction">
   <result>/page/top.jsp</result>
   <result type="redirect" name="taobaoTop">taobaoTop.jsp</result>
   <result type="redirectAction" name="baidoTop">BaidoTop</result>
   <result type="chain" name="smartPhone">SmartPhoneTop</result>  
</action>
上記のコードは普段struts.xmlまたはご自分で定義したxmlファイルの中で記述される。
それぞれ説明すると、
■ディフォルトの処理フロー
<result>/page/top.jsp</result>
、type属性が設定されてないですね。struts2でディフォルトはdispatcherを設定するためです。 ■redirectまたはredirectActionの処理フロー 次の2行のコード
<result type="redirect" name="taobaoTop">taobaoTop.jsp</result>
<result type="redirectAction" name="baidoTop">BaidoTop</result>
この2行のコードを見てみると、遷移の意味をすぐにおわかりますね。図を見てください。 ・redirect処理

・redirectAction処理

ここで気をつけたいのは、別のリクエストになっているため、元のオブジェクトは破棄され、あらたなActionクラスのオブジェクトが生成されているのです。遷移先でもデータが必要であれば、パラメータとして値を設定する必要があります。まとめてすると、下記の2点です。
・ブラウザのアドレスバー表記とアクションは一致する
・request の内容は引き継がれない

■「chain」の処理フロー

<result type="chain" name="smartPhone">SmartPhoneTop</result>
「chain」は、リダイレクトではなく、同じリクエスト内の処理として別のActionを呼び出します。このとき、Actionクラスのプロパティを、遷移先のActionクラスに自動でコピーする仕組みがあり、リクエストのパラメータなどが引き継がれることになります(同じ名前のアクセッサメソッドが呼び出されます)。 ブラウザのアドレスバー表記とアクションは一致しない request の内容は引き継がれる ※実は、chainの利用はお推奨されていません。なぜなら、struts2では、Actionクラスをできるだけシンプルに設計することが望ましいとされているからです。
まとめ:redirectとredirectActionは今のAction情報を廃棄され、別のURLページまたは別のActionへリダイレクトする。もしも情報を次のstepに引き継ぎたい場合、パラメータとして値を設定する必要があります。
chainはいまのAction情報を次のAction側に引き継ぐ、利用できる。注意すべきことはブラウザのURLは最初のActionのURLとなる。

以上、struts2でchainとredirectのメモです。

♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
2人
このエントリーをはてなブックマークに追加


★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。

お名前:

 

EMAIL:

 

URL:

 

認証コード:

zanmai.net-safecode

 


※会員の方は認証コードを要らないから、新規登録をオススメ!

check