我正在学习Spring,并按照《Spring4在行动》一书做练习。我对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;
}
这是文件registerform.jsp,位于src/main/webapp/web inf views路径中
<%@ 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:在locale“en\u us”的代码“spittr.welcome”下找不到消息。
当区域设置为(意大利语)时,页面工作没有问题,因此实际上读取属性。
如果我把文件src/main/resources/messages\u 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选项,但似乎不起作用。
你知道我做错了什么吗?如果你需要更多的信息,请告诉我。
提前谢谢你的时间。
1条答案
按热度按时间goqiplq21#
此错误通常由basename中的错误配置引起。如果消息文件位于web inf文件夹中,则捆绑包的路径也必须作为setbasename()方法的一部分,如下所示: