[Seasar-user:14762] Re: Coolデプロイ設定で、親PageクラスのAjaxメソッドをコールするとエラーが発生

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 6月 20日 (金) 16:30:11 JST


小林 (koichik) です.

Date:    Fri, 20 Jun 2008 15:46:29 +0900
From:    株式会社Groony安澤徹也 <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:14759] Coolデプロイ設定で、親PageクラスのAjaxメソッドをコールするとエラーが発生

> Coolデプロイ設定で、親Pageクラス(※)のAjaxメソッド(ajaxXxx)をコールするとエラー[javax.servlet.ServletException: Ajax Component 
> Name[hmma_hmma007_hmma007Page] is not found.
> ]が発生します。
> Hotデプロイ、Warmデプロイ設定では発生しません。

HOT/WARM deploy は要求されたコンポーネント名
(この場合は hmma007Page) を探しますが,COOL の
場合はファイルシステムを走査して,クラス名から
コンポーネントを登録します.その際,既に登録済みの
コンポーネントは登録されません.
そのため,Hmma00701Page が Hmma007Page より先に
見つかると (名前順ではそうなる),Hmma00701Page の
スーパークラス Hmma007Page もその時点で登録されて
いると判断されるため,コンポーネントとしては登録
されません.
その結果,hmma007Page という名前のコンポーネント名は
見つからないということになります.

> また、子クラスにAjaxメソッドを移動するとエラーは発生しません。
> 何か適切な回避策ありますでしょうか?

Hmma007Page は抽象クラスにしてください.
もし hmma007.html も存在するなら,Hmma007Page や
Hmma00701Page の共通のスーパークラスを作成し,
それを抽象クラスとしてください.
つまり,

・サブクラスを持つクラスは抽象クラスにする
・具象クラスならサブクラスを持たない

という原則を守ってください.
その上で,Ajax の呼び出しは具象クラス
(この例の場合は Hmma00701Page) に対して
行ってください.


-- 
<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 メーリングリストの案内