1

spring-jsf 統合アプリがあります。faces-config.xml で resource-bundle からメッセージを取得しようとすると、問題なく実行されます。しかし、このリソース バンドルを spring applicationContext.xml に移動したいのですが、リソース バンドルが見つからないという問題があります。これが私のfaces-configです。

    <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>

         <resource-bundle>
                  <base-name>/resources/locale/messages</base-name>
                   <var>msg</var>
         </resource-bundle>
         <locale-config>
                   <default-locale>es</default-locale>
                   <supported-locale>en</supported-locale>
                   <supported-locale>fr</supported-locale>
          </locale-config>

    </application>
</faces-config>    

と私のapplicationContext.xml

        <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="es" />
    </bean>


<bean id="msg"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="useCodeAsDefaultMessage" value="true" />
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="cacheSeconds" value="1" />
</bean>
4

1 に答える 1

3

<base-name>要素が間違っているようです。

<resource-bundle>
  <base-name>Messages</base-name>
  <var>msgs</var>
</resource-bundle>
<locale-config>
  <default-locale>en_US</default-locale>
  <supported-locale>nl</supported-locale>
  <supported-locale>es</supported-locale>
</locale-config>

リソース バンドルのベース名は、プロパティ ファイルのプレフィックスです。JSF は、ロケールを判別し、クラスパスからプロパティ ファイルの正しいファイル名を導出するのに十分なほどスマートです。

例えば。

Messages_en_US.properties

Messages_es.properties

上記の抜粋は、英語として設定されたデフォルトのロケールと、以下にリストされている他のサポートされているロケールを示しています。この優先ロケールを持つ訪問者が JSF ページを要求すると、適切な名前のリソース バンドルからプロパティ値を取得するのに十分なほど賢くなります。

リソースバンドルに関する BalusC のチュートリアルから引用

<application>
    <locale-config>
        <default-locale>en_US</default-locale>
        <supported-locale>nl</supported-locale>
        <supported-locale>es</supported-locale>
    </locale-config>
    <resource-bundle>
        <base-name>com.example.faces.i18n.Text</base-name>
        <var>text</var>
    </resource-bundle>
</application>

これを行うもう 1 つの方法は、独自の ResourceBundle クラスを実装することです。

public class Text extends ResourceBundle {

これを行う方法の詳細な手順は、リンクされたチュートリアルに記載されています。

独自のリソース バンドルを実装することの追加の利点は、これを Application Scope を使用して Spring Bean として宣言でき、コード内のさまざまなリソース バンドル プロパティにアクセスする必要がある場合に備えて、DI を介してアプリケーション全体でそれを他のコードにプッシュできることです。

于 2013-04-19T13:10:11.460 に答える