1

看似简单的任务,结果却是几个小时的痛苦。我在没有 web.xml 文件的 JavaEE 6 和 Servlet 3.0.1 api 上构建 Spring 3.1 MVC 应用程序。我有一个 像这个片段一样的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;
    }
}

我已经成功设置了 Apache Tiles 2.2.2 和 2 个基本控制器。现在我想将 ResourceBundles 添加到正在工作的 Spring/Tiles 应用程序中,但我无法让它们工作。

搜索后,我发现了一些可能出错的地方:

  • 我应该在我的 JSP 页面中使用fmt:message key="application.header"还是应该使用spring:message code="application.header" ?第一个忽略未找到的值,第二个抛出错误。
  • 我使用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 中运行我手动将它部署到我的本地 tomcat 7.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 回答