4

アプリケーションに使用するために春に messageSource を接続しようとしています。機能していません。次のエラーが表示されます。

org.springframework.context.NoSuchMessageException: ロケール「en」のコード「validation_required」の下にメッセージが見つかりません。

私のapplicationContext.xmlには、messageSourceの次の定義が含まれています。

   <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>classpath:messages</value>
            </list>
        </property>
    </bean>

私のメッセージプロパティファイルは次の場所にあります:

/WEB-INF/classes/messages/messages_en_US.properties

最後に、エラーを生成する呼び出しは次のとおりです。

String message = messageSource.getMessage("validation_required", null, Locale.ENGLISH);

この時間に誰か助けてくれませんか?

4

4 に答える 4

5

あなたのパスが正しくないようです。/WEB-INF/classes/messages/messages_en_US.properties の下にバンドルがあるため、ベース名の設定は次のようになります: classpath:messages/messages (この場合のベース名はパスとプロパティ ファイルのプレフィックスを意味します)。

于 2010-12-31T16:17:17.660 に答える
4

問題は、リソース バンドルと指定しているロケールを定義した方法にあります (リソース バンドルの検索順序と一致しません。バンドルの名前を「messages_en.properties」に変更するか、「getMessage(... )" with new Locale("en","US"). 私は最初のオプションを好みます。

于 2010-12-31T06:03:58.020 に答える
3

次の Bean を使用していますが、ファイルへのパスを指定しなくても正常に動作しています。

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
      scope="singleton" lazy-init="default">
    <property name="basename" value="messages"/>
</bean>

私が使用するファイルは単に「messages_en.properties」および「messages_es.properties」と呼ばれていますが、よくわかります。

電話すると

    messageSource.getMessage("validation_required", null, null);

例外がありますか?このファイル名 messages_en.properties または messages_us_en.properties を使用してみてください

于 2010-12-31T16:39:15.790 に答える
0

文字列を取得するためのコメントを見てみてください

package yours;
import java.util.Locale;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;

/**
 *  
 * Permet la recuperation des String du LocaleContextHolder hors des jsp 
 * Les langues sont placées dans main/ressources/messagesSources.properties 
 * 
 * Example : new MSG("recuperation_name_invalid").value()
 * 
 */
@Configurable
public class MSG
{

    private String key;

    @Resource(name = "messageSource")
    private MessageSource messageSource;

    public MSG(String key)
    {
        super();
        this.key = key;
    }

    public String value()
    {
        Locale locale = LocaleContextHolder.getLocale();

        return messageSource.getMessage(key, new Object[0], locale);
    }

    @Override
    public String toString()
    {
        return value();
    }


}
于 2014-08-20T08:17:14.483 に答える