Struts 2ノート3

6246 ワード

Struts2 1.テーマ
strutsのフォームラベルにトピックを指定できます.一般的なトピックxhtml(デフォルト)、simple(スタイルは設定しません)はthemeプロパティで要素のトピックthemeのデフォルト値をxhtmlに設定できます.デフォルトを設定しない場合、xhtml設定トピックの3つの方法があります.1.ラベルのthemeプロパティで指定-ラベルのthemeプロパティで指定し、現在のラベルとその子孫ラベルに役立ちます.2.ドメインオブジェクトにtheme属性を設定-requestで指定すると、現在のリクエストに対して有効になります-sessionで指定すると、現在のセッションに対して有効になります-アプリケーションで指定すると、現在のWEBに対して有効になります3.struts.xmlファイルは定数を変更して構成され、プロジェクト全体のデフォルトのトピックが変更されます.
<constant name="struts.ui.theme" value="simple"></constant>

2.ModelDrivenブロッキング:ブロッキングの役割はフィルタと似ています.ブロッキングは、要求がActionに到達する前にブロッキングすることができ、要求がActionに到達する前にブロッキングによっていくつかの準備を行うことが望ましい.
Struts 2の簡単な運転フロー1.要求はまずStrutsPrepareAndExecuteFilterに到着する.doFilter() 2.doFilterメソッドでは、まずActionMapping判定を取得する:ActionMappingがnullである、Strutsリクエストではない、直接ローにするActionMappingがnullでない、Strutsリクエストである、処理を継続する.コンフィギュレーションマネージャでStrutsのコンフィギュレーション情報をロードし、要求に対応するActionオブジェクトを見つけてコンフィギュレーション情報に基づいてActionProxyプロキシクラスを作成します.4.StrutsActionProxy.Excute()メソッドでDefaultActionInvocationを呼び出します.invoke()メソッド5.すべてのブロッキングを反復して、ブロッキングinterceptメソッドをそれぞれ呼び出し、ブロッキング要求6を行う.interceptメソッド私たちは要求に対していくつかの処理を行い、処理が終わった後にDefaultActionInvocationを継続する.invoke()メソッド7.すべてのブロッキングが呼び出されるまで繰り返す.最後にアクションを実行する方法です.
要求パラメータはどのカプセル化されていますか:要求パラメータはActionに到達する前に、ParametersInterceptorブロッカーを通過し、このブロッカーでは要求パラメータを値スタックにカプセル化したスタックトップオブジェクトが自動的にカプセル化されます.彼は属性名に基づいて属性値をスタックトップオブジェクトの対応する属性に設定し、スタックトップにこの属性がない場合、第2のオブジェクトにカプセル化し続けます.
ModelDrivenInterceptorは、現在のActionがModelDrivenインタフェースを実装しているかどうかを判断します.このインタフェースが実装されている場合、現在のActionのgetModelメソッドが呼び出されます.このメソッドは、オブジェクトを返し、値スタックのスタックの上部に押し込まれます.
paramsPrepareParamsStackこのブロッキングスタックではparamsブロッキングが2回実行され、ModelDrivenの前に1回、ModelDrivenの後に1回実行されます.これにより、異なる要求パラメータに基づいて、値スタックの上部に異なるオブジェクトを入れることができます.
このブロッキングスタックを使用する前に、まず現在のpackageのデフォルトのブロッキングスタックを変更します.
現在の問題:現在、私たちのCRUD練習では、delとupdateの2つの方法1つはidに基づいてユーザーを削除することです.1つはユーザー情報を更新することです.この2つの方法で送られてきた要求パラメータにはidがあり、いずれもidがあるため、getModelを呼び出すとデータベースに従業員情報を照会します.しかし、この2つのビジネスにはこのようなニーズはありません.
3.PrepareブロッキングPrepareブロッキングが実行されると、ActionがPreparableインタフェースを実装すると、現在のActionのprepare()メソッドが呼び出されます.このブロッキングは一般的にModelDrivenブロッキングの前に実行されるので、prepare()メソッドもgetModel()メソッドで実行されます.したがって、一般的にPrepareブロッキングはModelDrivenブロッキングとともに使用され、prepare()を使用してgetModel()メソッドのmodelを準備します.
プロセス:まず、actionに行って2つのメソッドを探します.prepareMethodName prepareDoMethodNameたとえば、メソッド名inputはprepareInputとprepareDoInputを探します.見つかったらメソッドを実行します.見つからなかったら実行しません.
最後にalwaysInvokePrepareの値に基づいてprepare()メソッドを実行するかどうかを決定します
メソッドの実行順序:
    action.prepareXxx 
    action.prepare     
    action.getModel
    action.action 

私たちはprepareXxx方法で個性的な処理をすることができて、prepare方法でいくつかの統一的な処理をすることができます.
私たちが統一的に処理したくないなら、prepareメソッドを実行したくない.パッケージラベルでプロファイルでprepareを変更できます.AlwaysInvokePrepareプロパティ値がfalseの場合prepareメソッドを無効にします
<interceptors>
            <interceptor-stack name="myStack">
                <interceptor-ref name="paramsPrepareParamsStack">
                    <param name="prepare.alwaysInvokePrepare">false</param>
                </interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="myStack"></default-interceptor-ref>

4.タイプ変換
タイプ変換とは、HttpリクエストのStringタイプパラメータを指し、Javaのオブジェクトに変換されます.ほとんどのタイプのStruts 2は内部で自動的に完了します.Actionにintタイプが必要でabcが送信された場合、タイプ変換異常が発生しますが、異常が発生した場合、ページにエラーメッセージが表示されず、直接Actionにコミットされ、付与に失敗します.私たちはActionクラスでValidationAwareを実装することができます.このインタフェースを実装した後、タイプ変換異常が発生すると、nameがinputのresultに移動しますが、このインタフェースを実装するのは面倒です.ValidationAwareには非常に便利な実装クラスがあると思いますか?
実際にActionSupportクラスではこのインタフェースが実装されており,クラスを直接継承するだけでよい.また、inputという名前のresultを構成する必要があります.inputが実行するページのstrutsラベルのトピックがxhtmlの場合、ページにエラーメッセージが自動的に表示されます.ただしsimpleの場合は表示されません.
エラーメッセージのカスタマイズ:1.関連するクラスのパスの下にクラス名を作成します.properties 2.ファイルにはinvalidという内容が設定.fieldvalue.FieldName=ヒント
Simpleトピックのテンプレートの変更-struts 2は、テンプレートをロードするときに、現在のアイテムの下に優先的にロードされるので、strutsと同じ名前のパッケージのテンプレートファイルを作成してstruts 2の既存のファイルを置き換えることができます.例えば、simpleトピックの下のfielderrorを変更したいです.ftlはプロジェクトの下に新しいパッケージtemplateを作成するだけです.シンプルで修正したfielderrorftlファイルをパッケージに入れると、struts 2に付属するトピックが自動的に置き換えられます.
(理解)複雑なタイプを処理するために、タイプ変換をカスタマイズする必要がある場合があります.カスタムタイプ変換器の作成手順:1.クラス継承StrutsType Converter 2を書く.コンフィギュレーションファイルを作成し、フレームワークにコンバータ1)ローカルコンバータを登録する
関連するクラスと同じパッケージの下でファイル名に関連するクラス名-conversion.properties構成情報属性名=変換器の全クラス名
2)グローバルコンバータ
クラスに直接配置するルートディレクトリ(src)ファイル名xwork-conversion.properties構成情報変換クラスの全クラス名=変換器の全クラス名
複雑なタイプの変換:
スタックトップオブジェクトのプロパティのプロパティに値を割り当てる場合は、フォームのnameプロパティを直接プロパティ名に設定できます.属性名Strutsは、属性の属性に属性を自動的に割り当てます.Collectionタイプのプロパティにインデックスに基づいてプロパティを追加することもできます.たとえば、プロパティ名[0]です.名前属性名[1].name
i18n
デフォルトのブロッキングスタックにはi 18 nブロッキングがあります.このブロッキングは、i 18 nブロッキングが呼び出されたときにrequest_を検索する現在のLocale情報を設定するために使用されます.localeこの要求パラメータは、ドライパラメータに基づいてLocaleオブジェクトを作成します.Localeオブジェクトをセッションドメインに挿入します.その後、国際化されたリソースファイルをロードするときに作成したばかりのLocaleオブジェクトに基づいて
i 18 nブロックされたリクエストにrequest_がない場合localeこのパラメータは、まずセッションからLocaleオブジェクトを取得し、セッションではオブジェクトを直接使用します.セッションにない場合は、ユーザーブラウザ情報またはローカルサーバの情報に基づいてLocaleオブジェクトを作成して使用します.