提问者:小点点

SPRING: javax.servlet.jsp.JspTagException:在代码'spittr.欢迎'下没有找到区域设置'en_US'的消息


我正在学习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选项,但似乎不起作用。

你知道我做错了什么吗?如果你需要更多的信息,请告诉我。

提前感谢您的时间。


共1个答案

匿名用户

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

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