【发布时间】:2012-08-08 21:56:31
【问题描述】:
看似简单的任务却变成了几个小时的痛苦。 我在没有 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 从更多位置加载文件,所以我指定了 classpath:
- 我将 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。这也让我可以更轻松地查看已部署的文件结构并更好地控制。
我不知道我做错了什么,任何帮助将不胜感激。
【问题讨论】:
标签: spring-mvc internationalization jstl servlet-3.0 tiles2