我正在学习Spring并通过遵循“Spring 4 in action”这本书进行练习。我对jsp文件中的字符串有一个问题,该字符串应该从名为messages.properties的属性文件中读取。
我的配置如下:
我在利用Maven
我已将属性文件放在以下路径中:
src/main/resources/messages.properties
src/main/resources/messages_it.properties
在messages.properties中,我定义了以下属性:
spittr.welcome=Welcome to Spittr!
在messages.properties中,我定义了以下属性:
spittr.welcome=Benvenuto su Spittr!
这就是我在DispatcherServlet类中定义ResourceBundleMessageSource的方式:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setFallbackToSystemLocale(false);
messageSource.setBasename("messages");
return messageSource;
}
这是位于路径src/main/webapp/WEB-INF-view内的文件checksterForm. jsp
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<%@ page session="false" %>
<html>
<head>
<%@ page isELIgnored="false" %>
<title>Spittr</title>
<link rel="stylesheet" type="text/css" href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1><s:message code="spittr.welcome" /></h1>
</body>
</html>
当页面呈现时,如果我的浏览器有一个locale=en,它会给出以下错误:javax. servlet.jsp.JspTagException:在代码spittr.欢迎下没有找到区域设置en_US的消息。
当语言环境是它(意大利语)时,页面工作没有问题,因此实际上读取了该属性。
如果我把文件src/main/Resources/messages_en.properties,问题就解决了,但我的问题是:当找不到语言环境时,不应该使用messages.properties文件吗?
我也尝试过ReloadableResourceBundleMessageSource,但我有同样的问题。
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
我尝试了不同的ResourceBundleMessageSource/ReloadableResourceBundleMessageSource选项,但似乎不起作用。
你知道我做错了什么吗?如果你需要更多的信息,请告诉我。
提前感谢您的时间。
此错误通常是由basename中的错误配置引起的。如果消息文件位于WEB-INF文件夹中,则包的路径也必须作为setBasename()方法的一部分,如下所示:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setFallbackToSystemLocale(false);
messageSource.setBasename("WEB-INF/messages");
return messageSource;
}