spring:javax.servlet.jsp.jsptagexception:在locale“en\u us”的代码“spittr.welcome”下找不到消息

w1e3prcc  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(388)

我正在学习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选项,但似乎不起作用。
你知道我做错了什么吗?如果你需要更多的信息,请告诉我。
提前谢谢你的时间。

goqiplq2

goqiplq21#

此错误通常由basename中的错误配置引起。如果消息文件位于web inf文件夹中,则捆绑包的路径也必须作为setbasename()方法的一部分,如下所示:

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setBasename("WEB-INF/messages");
    return messageSource;
}

相关问题