Struts 2フレームワーク学習の3:resultは結果を返す
前言
Struts 2のResultが戻り結果である場合、action処理が完了すると文字列の結果コードが返される.フレームワークは、この返される文字列に基づいて、指定したページにマッピングできます.result要素は、結果マッピングと結果タイプを返す2つの部分に分けることができます.
結果マッピング
resultには、nameプロパティとtypeプロパティの2つのプロパティがあります.このnameプロパティは、主にリソースの論理名を指定するために使用され、実際の名前はラベルの内部で指定されます.typeプロパティはresultの戻りタイプです.注意すべきは、この2つのプロパティは必須ではありません.この2つのプロパティを構成していない場合、実際にフレームワークはデフォルト値を指定し、nameプロパティのデフォルト値はsuccess、typeプロパティのデフォルト値はdispatcher(転送)です.フレームワークがデフォルト値を設定しているからこそ、構成しなくてもいいです.
以前の構成はresultを使用して直接構成されていましたが、実際にはresultラベルには、resultの実際のリソースの場所を指定するサブラベル
結果タイプ
結果タイプには、dispatcher、redirect、redirectAction、chainの4種類がよく使用されます.ここでdispatcherはすでにかなり転送していると述べており、redirectはリダイレクトに相当し、redirecActionもリダイレクトであるが、この結果タイプを使用する場合、一般的にはあるactionにリダイレクトし、最後の1つは主にactionのチェーン処理に用いられる.他にもplainText(サーブレットやjspのソースコードなど、ページの元の内容を表示するためのもの)、xsltなどがあります.
第1種:dispatcher
dispatcherもフレームワークのデフォルトの結果タイプですが、現在のクラスはorg.apache.struts 2.dispatcher.ServeretDispatcherResultで、locationとparseの2つのプロパティがあります.struts.xmlファイルで直接構成することもできます.
第2種:redirect
この結果タイプを使用すると、フレームワークのバックグラウンドではresponseオブジェクトのsendRedirectメソッドを使用してリダイレクトが行われます.リダイレクトと転送は異なります.具体的には、次のいくつかの態様で説明します.リダイレクトは2回のリクエストが発生し、転送は1回のリクエスト しか発生しない.リダイレクトするとブラウザのアドレスバーは変化するが、転送アドレスバーは変化しない である.リダイレクトの本質は、サーバがブラウザに別の場所へ資源を探すように伝えるため、アドレスバーは変化し、転送はサーバ内部で発生するので、アドレスバーは変化しない .リダイレクトは2回のリクエストであるため、2回目のリクエストセッションに保存された情報は無効であり、転送時には、元のリクエストであるため、セッションは依然として有効である.
リダイレクト時に元の関連情報をリダイレクト後のページに送信する必要がある場合は、OGLL式${username}を使用する必要があります(ログイン成功後にウェルカムページにリダイレクトし、ウェルカムページでOGLL式を使用してユーザー名を渡すことができます).たとえば、次の構成です.
第3種:redirectAction
この結果タイプはredirectと同様に、下位層はResponseオブジェクトを呼び出すsendRedirectメソッドでリダイレクトされます.この2つの違いは、redirect結果タイプが一般的にビュー向けであり、redirectActionはあるactionにリダイレクトされるので、actionで処理した後に別のactionに渡して処理を続行する場合は、redirerecAction結果タイプを使用します.
redirecActionの結果タイプには、actionName(リダイレクトが必要なactionを指定)とnamespace(actionが存在するネーミングスペースを指定し、パラメータが指定されていない場合、フレームワークはデフォルトのnamespaceから探します)の2つのパラメータがあります.たとえば、次の構成があります.
グローバル結果の主な役割は,複数のactionがあるページに戻る必要がある場合にグローバル結果を得ることである.例えば、電子商取引サイトで買い物をするとき、注文を見て、商品を追加してカートに登録する必要がある場合は、登録をグローバルな結果とすることができます.グローバル結果はパケットで定義され、パケットの下のすべてのactionがグローバル結果を共有できるようになります.
グローバル結果を構成する方法はactionでresultを直接構成するのとは異なり、グローバル結果はglobal-resultsラベルで定義されます.たとえば、次の構成があります.
Struts 2のResultが戻り結果である場合、action処理が完了すると文字列の結果コードが返される.フレームワークは、この返される文字列に基づいて、指定したページにマッピングできます.result要素は、結果マッピングと結果タイプを返す2つの部分に分けることができます.
結果マッピング
resultには、nameプロパティとtypeプロパティの2つのプロパティがあります.このnameプロパティは、主にリソースの論理名を指定するために使用され、実際の名前はラベルの内部で指定されます.typeプロパティはresultの戻りタイプです.注意すべきは、この2つのプロパティは必須ではありません.この2つのプロパティを構成していない場合、実際にフレームワークはデフォルト値を指定し、nameプロパティのデフォルト値はsuccess、typeプロパティのデフォルト値はdispatcher(転送)です.フレームワークがデフォルト値を設定しているからこそ、構成しなくてもいいです.
以前の構成はresultを使用して直接構成されていましたが、実際にはresultラベルには、resultの実際のリソースの場所を指定するサブラベル
param
があり、必要な属性nameがあり、実際には前の文書でresultの構成リソースです.たとえば、次の構成があります.<action name="login" class="action.LoginAction">
<result>
<!-- param location , -->
<param name="location">/success.jsp</param>
</result>
<result name="error">/error.jsp</result>
</action>
ここではリソースの実際の位置にparamタグを使用することを示しますが、resultのtype属性がdispatcherの場合、上のparamタグは直接省略できます.これも前にparamタグを書いていなくてもエラーが報告されていない理由です.結果タイプ
結果タイプには、dispatcher、redirect、redirectAction、chainの4種類がよく使用されます.ここでdispatcherはすでにかなり転送していると述べており、redirectはリダイレクトに相当し、redirecActionもリダイレクトであるが、この結果タイプを使用する場合、一般的にはあるactionにリダイレクトし、最後の1つは主にactionのチェーン処理に用いられる.他にもplainText(サーブレットやjspのソースコードなど、ページの元の内容を表示するためのもの)、xsltなどがあります.
第1種:dispatcher
dispatcherもフレームワークのデフォルトの結果タイプですが、現在のクラスはorg.apache.struts 2.dispatcher.ServeretDispatcherResultで、locationとparseの2つのプロパティがあります.struts.xmlファイルで直接構成することもできます.
<result type="dispatcher">
<!-- param location , -->
<param name="location">/success.jsp</param>
<param name="parse">true</param>
</result>
このlocationパラメータは、フレームワークのデフォルトで追加されたリソースの実際の位置を指定するために使用されます.parseパラメータはブール変数であり、trueの場合、locationパラメータのOGLL式が解析されることを示します(後述します).フレームワーク内のparseパラメータのデフォルト値もtrueです.第2種:redirect
この結果タイプを使用すると、フレームワークのバックグラウンドではresponseオブジェクトのsendRedirectメソッドを使用してリダイレクトが行われます.リダイレクトと転送は異なります.具体的には、次のいくつかの態様で説明します.
リダイレクト時に元の関連情報をリダイレクト後のページに送信する必要がある場合は、OGLL式${username}を使用する必要があります(ログイン成功後にウェルカムページにリダイレクトし、ウェルカムページでOGLL式を使用してユーザー名を渡すことができます).たとえば、次の構成です.
<!-- Action -->
<action name="login" class="action.LoginAction">
<result type="redirect">/success.jsp?user.username=${user.username}</result>
<result name="error">/error.jsp</result>
</action>
ログインに成功してsuccess.jspページにリダイレクトすると、ブラウザのアドレスバーがユーザー名をパラメータとしてsuccess.jspページに渡すのが観察されます.第3種:redirectAction
この結果タイプはredirectと同様に、下位層はResponseオブジェクトを呼び出すsendRedirectメソッドでリダイレクトされます.この2つの違いは、redirect結果タイプが一般的にビュー向けであり、redirectActionはあるactionにリダイレクトされるので、actionで処理した後に別のactionに渡して処理を続行する場合は、redirerecAction結果タイプを使用します.
redirecActionの結果タイプには、actionName(リダイレクトが必要なactionを指定)とnamespace(actionが存在するネーミングスペースを指定し、パラメータが指定されていない場合、フレームワークはデフォルトのnamespaceから探します)の2つのパラメータがあります.たとえば、次の構成があります.
<!-- HelloWorld -->
<action name="hello" class="example.HelloWorld">
<!-- /user UserAction -->
<result type="redirectAction">
<!-- action name -->
<param name="actionName">userAction</param>
<!-- action namespace -->
<param name="namespace">/user</param>
</result>
</action>
<!-- Action -->
<action name="login" class="action.LoginAction">
<result type="redirect">/success.jsp?user.username=${user.username}</result>
<!-- namespace name error action -->
<result type="redirectAction">
<!-- namespace action namespace -->
<param name="actionName">error</param>
</result>
</action>
<action name="error">
<result>/error.jsp</result>
</action>
グローバル結果グローバル結果の主な役割は,複数のactionがあるページに戻る必要がある場合にグローバル結果を得ることである.例えば、電子商取引サイトで買い物をするとき、注文を見て、商品を追加してカートに登録する必要がある場合は、登録をグローバルな結果とすることができます.グローバル結果はパケットで定義され、パケットの下のすべてのactionがグローバル結果を共有できるようになります.
グローバル結果を構成する方法はactionでresultを直接構成するのとは異なり、グローバル結果はglobal-resultsラベルで定義されます.たとえば、次の構成があります.
<!-- -->
<global-results>
<result name="error">/error.jsp</result>
<result name="login" type="redirectAction">login!login</result>
</global-results>