看似简单的任务,结果却是几个小时的痛苦。我在没有 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。这也让我可以更轻松地查看部署的文件结构并更好地控制。
我不知道我做错了什么,任何帮助将不胜感激。