【struts 2】redirectというResultType

5254 ワード

1)基本使用
名前が「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メソッドが実行された後のデータも、要素の定義で使用できます.同様にActionでfolder文字列を定義し、executeメソッドまたはvalidateメソッドで値を割り当てます.では、の定義でfolderという変数を参照できます.例は次のとおりです.
<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