[Seasar-user:8522] Re: [S2] XIncludeできません

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 6月 21日 (木) 02:00:32 JST


小林 (koichik) です.

Date:    Wed, 20 Jun 2007 23:37:46 +0900
From:    松崎 学 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:8521] Re: [S2] XIncludeできません

> > こちらで試したところ,Validator の
> > setAllValidatorLabels(Map) で HashMap が
> > DI されました.
> ソースを見直してみましたが、やはりダメでした。。。
> diconとValidatorを添付します。
> (ValidatorはTRequiredValidatorにMapを追加しただけです。)

添付のソースと dicon をちょっとだけ変更して
(パッケージとか) HOT deploy で試してみましたが,
ちゃんと DI されました.

Validator のソースと allValidatorLabels.dicon
そのものには問題がないように思います.

あと可能性があるのは allValidatorLabels という
名前のコンポーネントが重複していることでしょうか.

S2TestCase を継承したテストクラスで

    protected void setUp() {
        super.setUp();
        include("app.dicon");
    }
    public void test() throws Exception {
        Map labels = (Map) getComponent("allValidatorLabels");
    }

とやってみてください.

また,allButtonLabels など,allValidatorLabels 以外の
プロパティを Validator に持たせてどうなるか確認してください.

後は...
Web コンテナの起動時に

S2Containerを作成します。path=〜

というログが出ていると思うので,allValidatorLabels.dicon など
必要な dicon がロードされていること,余計な dicon が
ロードされていないことを確認してください.

また,web.xml を次のように変更して

    <servlet>
        <servlet-name>s2servlet</servlet-name>
        <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
        <init-param>
            <param-name>configPath</param-name>
            <param-value>app.dicon</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value><!-- ここを true に -->
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

http://localhost:8080/webapp/teedaservlet?command=list

のようにすることでコンポーネントの状態を
確認することができます.
allValidatorLabels がちゃんと (一つだけ) 見えているか
確認してください.

それから,DI されないのは HOT deploy でしょうか?
COOL deploy にするとどうなるでしょうか?



P.S.
余談ですが,Map は OGNL 式を使って次のように
書くことができます.

    <component name="allValidatorLabels" class="java.util.Map">
        #{
            "inAppCd" : #{
                "JPN" : "申請者",
                "ENG" : "english"
            },
            "inSts" : #{
                "JPN" : "状態",
                "ENG" : "english"
            },
            ...
        }
    </component>

<initMethod> を使って組み立てるよりもスッキリと
書けると思います.すでに手遅れかもしれませんが...
ご存じでしたらごめんなさい.
# 7000 行近い dicon は初めて見たもので.(^^;


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