[Seasar-user:10843] Re: Componentアノテーションで登録したコンポーネントがPageクラスでバインドできない
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 10月 2日 (火) 22:00:55 JST
小林 (koichik) です.
Date: Tue, 2 Oct 2007 20:55:46 +0900
From: "Shinichi Yanagisawa" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:10841] Componentアノテーションで登録したコンポーネントがPageクラスでバインドできない
> これで実行したところ、下記のような例外が発生しました。
> org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス(shopping.web.user.EntryUserPage$$EnhancedByS2AOP$$1451fb5)のプロパティ(jobCodeSet)の設定に失敗しました。理由はorg.seasar.framework.exception.OgnlRuntimeException: [ESSR0073]OGNLで例外が
> 発生しました。理由は[ESSR0046]コンポーネント(jobCodeSet)が見つかりません
JobCodeSet がコンポーネントとしてコンテナに
登録されていないためでしょう.
@Component アノテーションは,そのクラスが
どのようなコンポーネントなのかを指定するものです.
アノテーションを付けただけでコンテナに自動登録
されるわけではありません.
Seasar2 では,コンポーネントをコンテナに
登録する方法が複数あります.
・dicon ファイルに明示的に登録する
・AutoRegister を使う.
・SMART deploy を使う.
JobCodeSet のような 〜CodeSet がたくさんあるなら
SMART deploy,そうでなければ明示的に登録するのが
いいと思います.
dicon に明示的に登録するなら,app.dicon に
<component name="jobCodeSet" class="shopping.code.JobCodeSet"/>
と定義してください.
JobCodeSet の @Component アノテーションは
なくても構いません.
SMART deploy を使う場合は,自動登録されるクラスは
パッケージやクラス名が以下のドキュメントにある
規約に従う必要があります.
http://s2container.seasar.org/2.4/ja/DIContainer.html#SMARTdeploy
今回の場合,JobCodeSet という名前は (標準の)
規約に従っていないため,自動登録の対象とは
なりません.
例えばこれを
package shopping.helper;
@Component(instance=InstanceType.SINGLETON)
public class JobCodeSetHelper implements Serializable {
...
}
として,
public class EntryUserPage implements Serializable {
private static final long serialVersionUID = 1L;
@Binding(bindingType=BindingType.MUST)
private JobCodeSetHelper jobCodeSetHelper;
...
}
のようにすれば SMART deploy で自動登録されると
思います.
〜Helper のようにしたくない場合は,そのコンポーネント用の
Creator を作成して creator.dicon に登録するなどの必要が
あります.customizer.dicon も変更が必要です.
少々手間がかかるので,標準の規約に従うことをオススメ
します.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
Seasar-user メーリングリストの案内