【struts 2】redirectというResultType
5254 ワード
1)基本使用
名前が「redirect」のResultTypeはstruts-default.xmlの構成は次のとおりです.
構成により、対応する実装クラスはサーブレットRedirectResultであることがわかります.
このようなResultは、通常、ビュー技術としてJSPも使用される.javaxを包装していますservlet.http.HttpServeretResponseクラスのsendRedirectメソッドで、このResultTypeも次のページへのジャンプを実現するために使用されます.しかし、その機能は上記のdispatcherとは異なり、「redirect」の特徴は新しいリクエストであり、今回のリクエストと次のページにジャンプするリクエストは異なるオブジェクトであるため、値が異なることを意味します.
2)特殊用法
dispatcherのResultTypeと比較して、その特徴を見てみましょう.Actionのexecuteメソッドが実行された後のデータも、要素の定義で使用できます.同様にActionでfolder文字列を定義し、executeメソッドまたはvalidateメソッドで値を割り当てます.では、の定義でfolderという変数を参照できます.例は次のとおりです.
redirectはリダイレクトするので、次のページでは前のリクエストオブジェクトの値が取れず、値を渡す場合はgetでパラメータを渡すことができます.例は次のとおりです.
上記の構成では、新しいリクエストにaccountのパラメータが入力され、ウェルカムページでaccountの値が取得されます.しかし、前に書いたウェルカムページではこのaccountの値が取れないのはなぜですか?まず、前に書いたウェルカムページの値を見てみましょう.次のようにします.
以前のウェルカムページは、Struts 2のラベルを使用して取得したaccountの値で、Struts 2のラベルはStruts 2の値スタックの中に値を取りに行きますが、ここではResultを実行するときに、accountというパラメータを追加するように要求して、そのままページに戻って、Struts 2の実行過程を二度と行わない、つまり、ここで渡されたこのパラメータは、このリクエストに対応する値スタックにはまったく入らないので、ここではこの書き方では値が取れません.
では、このaccountパラメータの値を取得するにはどうすればいいのでしょうか.サーブレットのHttpサーブレットRequestオブジェクトを直接使用してパラメータを取得する方法と、EL式を直接使用する方法の2つの簡単な方法があります.例を次に示します.
3)より完全な構成方式
「dispatcher」と同様に、「redirect」はを構成することもでき、locationとparseを構成することもできます.以下のようにします.
参考資料:http://www.iteye.com/topic/1124526
名前が「redirect」のResultTypeはstruts-default.xmlの構成は次のとおりです.
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
構成により、対応する実装クラスはサーブレットRedirectResultであることがわかります.
このようなResultは、通常、ビュー技術としてJSPも使用される.javaxを包装していますservlet.http.HttpServeretResponseクラスのsendRedirectメソッドで、このResultTypeも次のページへのジャンプを実現するために使用されます.しかし、その機能は上記のdispatcherとは異なり、「redirect」の特徴は新しいリクエストであり、今回のリクエストと次のページにジャンプするリクエストは異なるオブジェクトであるため、値が異なることを意味します.
2)特殊用法
dispatcherのResultTypeと比較して、その特徴を見てみましょう.Actionのexecuteメソッドが実行された後のデータも、
<result name="toWelcome" type="redirect">/${folder}/welcome.jsp</result>
redirectはリダイレクトするので、次のページでは前のリクエストオブジェクトの値が取れず、値を渡す場合はgetでパラメータを渡すことができます.例は次のとおりです.
<result name="toWelcome" type="redirect">/${folder}/welcome.jsp?account=${account}</result>
上記の構成では、新しいリクエストにaccountのパラメータが入力され、ウェルカムページでaccountの値が取得されます.しかし、前に書いたウェルカムページではこのaccountの値が取れないのはなぜですか?まず、前に書いたウェルカムページの値を見てみましょう.次のようにします.
<s:property value="account"/>
以前のウェルカムページは、Struts 2のラベルを使用して取得したaccountの値で、Struts 2のラベルはStruts 2の値スタックの中に値を取りに行きますが、ここではResultを実行するときに、accountというパラメータを追加するように要求して、そのままページに戻って、Struts 2の実行過程を二度と行わない、つまり、ここで渡されたこのパラメータは、このリクエストに対応する値スタックにはまったく入らないので、ここではこの書き方では値が取れません.
では、このaccountパラメータの値を取得するにはどうすればいいのでしょうか.サーブレットのHttpサーブレットRequestオブジェクトを直接使用してパラメータを取得する方法と、EL式を直接使用する方法の2つの簡単な方法があります.例を次に示します.
${param.account}
<br/>
<%=request.getParameter("account") %>
3)より完全な構成方式
「dispatcher」と同様に、「redirect」はを構成することもでき、locationとparseを構成することもできます.以下のようにします.
<result name="toWelcome" type="redirect">
<param name="location">/s2impl/welcome.jsp</param>
<param name="parse">true</param>
</result>
参考資料:http://www.iteye.com/topic/1124526