1

簡単な作業のように見えたのは、数時間の苦しみであることが判明しました。Web.xmlファイルを使用せずにJavaEE6およびサーブレット3.0.1APIでSpring3.1MVCアプリケーションを構築しています。このフラグメントのようなWebMvcConfigurationクラスがあり ます。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "be.collectortools.collectorsite")
public class MvcConfig extends WebMvcConfigurationSupport {

@Bean
    public ReloadableResourceBundleMessageSource messageSourceBean() {
        String[] basenames = {"classpath:messages"};

        ReloadableResourceBundleMessageSource resourceBundle = new ReloadableResourceBundleMessageSource();
        resourceBundle.setBasenames(basenames);
        resourceBundle.setDefaultEncoding("UTF-8");
        return resourceBundle;
    }
}

ApacheTiles2.2.2を2つの基本的なコントローラーと一緒に正常にセットアップしました。ここで、動作中のSpring / TitlesアプリケーションにResourceBundleを追加したいのですが、動作させることができません。

検索した後、私はうまくいかないかもしれないいくつかを見つけました:

  • JSPページでfmt:message key = "application.header"を使用しますか、それともspring:message code = "application.header"を使用する必要がありますか?最初の値は見つからない値を無視し、2番目の値はエラーをスローします。
  • 私はReloadableResourceBundleMessageSourceを使用していますが、これは「より良い」か、少なくともResourceBundleMessageSourceよりも新しいはずです。これで問題ありませんか?
  • ReloadableResourceBundleMessageSourceはより多くの場所からファイルをロードするため、クラスパスを指定しました。
  • messages.propertiesファイルをsrc/main/resourcesフォルダーに配置しました
  • バンドル名の末尾にロケールを追加しない場合、これが(デフォルトの)フォールバックとして使用されるのは正しいですか?いずれにせよ、「en_US」ロケールを追加しても役に立ちません。

エラー

root cause

javax.servlet.jsp.JspTagException: No message found under code 'application.header' for locale 'en_US'.
    org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:184)

また、warファイルはEclipse内で実行されていません。ローカルのTomcat7.0.23に手動でデプロイします。これにより、デプロイされたファイル構造をより簡単に確認でき、より適切に制御できるようになります。

私は何が間違っているのか分かりません。助けていただければ幸いです。

4

1 に答える 1

1

MessageSource Beanには、messageSourcenotという名前messageSourceBeanを付ける必要があります。@ Beanを次のように変更すると、メッセージが正しく解決されるはずです。

@Bean
public ReloadableResourceBundleMessageSource messageSource() {
    String[] basenames = {"classpath:messages"};

    ReloadableResourceBundleMessageSource resourceBundle = new ReloadableResourceBundleMessageSource();
    resourceBundle.setBasenames(basenames);
    resourceBundle.setDefaultEncoding("UTF-8");
    return resourceBundle;
}
于 2012-08-08T22:14:45.307 に答える