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