[Seasar-user:16494] Re: Intercepter内で発生元Pageクラスのメンバ変数を参照したい
浅野護
[E-MAIL ADDRESS DELETED]
2008年 12月 12日 (金) 11:17:00 JST
早速の返信ありがとうございます。
>このため,initialize() で設定した値は HTML の
>フォームからサブミットされるか,@Page スコープ
>などで保持しない限り失われます.
上記で教えていただいた方法で解決しました。(落ち着いて考えると当たり前の事でしたね。すみません。。。)
ありがとうございました。
> <component name="pageCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addAspectCustomizer">
> <arg>"accessLogIntercepter"</arg>
> <arg>"do.*"</arg>
> </initMethod>
> </component>
またIntercepterの定義を上記のように変更することでintercepterもHOTになることも確認しました。
しかし、上記の「accessLogIntercepter」の処理を、特定Pageクラスのみ除外する場合はどのように記述すればよいのでしょうか?
ここで悩んでいるのは、例えば「traceCustomizer」などは全Pageクラスを対象にしたいのですが、「accessLogIntercepter」のみ特定Pageクラスを除外する方法です。
例えば以下のように記述すると「traceCustomizer」の処理もXxxPageに対して除外されてしまいます。(違っていたらすみません)
<component name="pageCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
<initMethod name="addIgnoreClassPattern">
<arg>"jp.co.xxxxxxx"</arg>
<arg>XxxPage</arg>
</initMethod>
<initMethod name="addAspectCustomizer">
<arg>"accessLogIntercepter"</arg>
<arg>"do.*"</arg>
</initMethod>
</component>
よろしくお願いいたします。
2008/12/11 19:00 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (koichik) です.
>
> Date: Thu, 11 Dec 2008 18:11:38 +0900
> From: "浅野護" <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:16491] Intercepter内で発生元Pageクラスのメンバ変数を参照したい
>
> > PageクラスのdoXXXメソッドが呼ばれたときに、doXXXメソッドの前後でアクセスログを出力するIntercepterクラスを作成しています。
> >
> Pageクラスのinitialize()メソッドで、自クラスのメンバ変数に値をセットしておき、アクセスログ出力Intercepterでその値を出力しようとしたのですが、initialize()でセットした値が空のままになってしまいます。
> > サンプルコードの抜粋を以下に記述しますが、元々このようなことは出来ないのでしょうか?
>
> initialize() が呼ばれる時と do〜() が呼ばれた時では
> ページクラスのインスタンスは異なります.
>
>
> http://teeda.seasar.org/ja/extension/concept/lifecycle.html#リクエストパターンとライフサイクルメソッド<http://teeda.seasar.org/ja/extension/concept/lifecycle.html#%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%A8%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89>
>
> 初期表示の際は
>
> AaaPage aaaPage = new AaaPage();
> aaaPage.initialize();
>
> ポストバックの際は
>
> AaaPage aaaPage = new AaaPage();
> aaaPage.doXxx();
>
> のように動いていると理解してください.
>
> このため,initialize() で設定した値は HTML の
> フォームからサブミットされるか,@Page スコープ
> などで保持しない限り失われます.
>
> http://teeda.seasar.org/ja/extension/concept/scope.html
>
> > また上記のソースをHOT Deployで動かすと、Intercepterの「if(obj instanceof
> > AaaPage){」の行が、初めて通るときは「false」で判断されました。(2回目以降はtrue)
> > ただしCOOL Deployで動かすと、一回目もtrueになります。
>
> Interceptor を dicon に定義しているのでは
> ないでしょうか?
>
> dicon に定義するとその Interceptor は HOT の
> 対象ではなくなるため,上記の現象となります.
> 詳しくは以下を参照してください.
>
> http://ml.seasar.org/archives/seasar-user/2008-October/015960.html
> http://ml.seasar.org/archives/seasar-user/2008-March/013148.html
>
> Interceptor も SMART deploy にできるので,
> 通常は dicon に定義する必要はありません.
> インターセプタのパッケージは <ROOT>.interceptor に
> なっている必要があります.
> この例だと <ROOT>.interceptor.AccessLogIntercepter
> であれば,このインターセプタ自身を dicon に定義
> しなくても,customizer.dicon で
>
> <component name="pageCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addAspectCustomizer">
> <arg>"accessLogIntercepter"</arg>
> <arg>"do.*"</arg>
> </initMethod>
> </component>
>
> とするだけでページクラスに AccessLogIntercepter が
> 適用され,インターセプタ自身も HOT になります.
>
>
> P.S.
> 質問の際は利用しているプロダクトの名前や
> バージョンを明記してください.
>
>
> --
> <component name="koichik">
> <property name="fullName">"Koichi Kobayashi"</property>
> <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
> <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20081212/66f9cda9/attachment-0001.html>
Seasar-user メーリングリストの案内