[Seasar-user:16492] Re: Intercepter内で発生元Pageクラスのメンバ変数を参照したい
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2008年 12月 11日 (木) 19:00:20 JST
小林 (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#リクエストパターンとライフサイクルメソッド
初期表示の際は
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 メーリングリストの案内