Struts 2フレームワーク学習の3:resultは結果を返す

10175 ワード

前言
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メソッドを使用してリダイレクトが行われます.リダイレクトと転送は異なります.具体的には、次のいくつかの態様で説明します.
  • リダイレクトは2回のリクエストが発生し、転送は1回のリクエスト
  • しか発生しない.
  • リダイレクトするとブラウザのアドレスバーは変化するが、転送アドレスバーは変化しない
  • である.
  • リダイレクトの本質は、サーバがブラウザに別の場所へ資源を探すように伝えるため、アドレスバーは変化し、転送はサーバ内部で発生するので、アドレスバーは変化しない
  • .
  • リダイレクトは2回のリクエストであるため、2回目のリクエストセッションに保存された情報は無効であり、転送時には、元のリクエストであるため、セッションは依然として有効である.

  • リダイレクト時に元の関連情報をリダイレクト後のページに送信する必要がある場合は、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>