2

Spring MVC で OSGI を使用しています。詳細は次のとおりです。

バンドル b1-メッセージ ソースを Bean として宣言します。メッセージ リソースは、bundleb1 のサービスで完全に自動配線されています。xml のメッセージ ソースのエントリは

<bean id="messageSource" class="org.synyx.messagesource.InitializableMessageSource">
<property name="basename" value="ApplicationResources"/>
<property name="messageProvider">
    <bean class="org.synyx.messagesource.jdbc.JdbcMessageProvider">
        <property name="dataSource" ref="dataSource"/>            
    </bean>
</property>
</bean>

メッセージソースは、バンドル b1 の osgi-context.xml で次のようにサービスとして公開されます。

 <osgi:service interface="org.springframework.context.MessageSource" ref="messageSource"/>

メッセージ リソースを WAB バンドルにインポートするには、WAB の osgi-context.xml に次のエントリを作成し、バンドル b1 によって公開されている messageSource サービスをインポートするために次のエントリを作成します。

注 - WAB で messageSource Bean を作成していません (*-servlet.xml で messageSource を定義していません)。

問題は - WAB に配置されたサンプル Jsp をヒットすると、エラーが発生することです。

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'user.nametext' for locale 'en_US'.

分析 - Spring コードをさらにデバッグすると、webapplication コンテキストで使用される messagesource のタイプが DelegatingMessageSource であることがわかりました。しかし、バンドル b1 からインポートされた messageSource は、タイプ InitializableMessageSource のオブジェクトを公開します。これは、webapplication コンテキストが、WAB の osgi-context.xml を介してインポートされた messageSource で初期化されていないことを意味します。

PLSヘルプ...

4

1 に答える 1

1

コンシューマー バンドルで、sping 構成に以下を追加します。

<osgi:reference id="messageSource" interface="org.springframework.context.MessageSource" />

次に、ローカル Bean の場合と同じように、messageSource-bean を注入できます。

于 2012-12-08T12:04:19.067 に答える