【问题标题】:SPRING: javax.servlet.jsp.JspTagException: No message found under code 'spittr.welcome' for locale 'en_US'SPRING:javax.servlet.jsp.JspTagException:在语言环境“en_US”的代码“spittr.welcome”下找不到消息
【发布时间】:2020-12-30 22:27:36
【问题描述】:

我正在学习 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-views 内的文件 registerForm.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: No message found under code 'spittr.welcome' for locale 'en_US' .

当语言环境是它(意大利语)时,页面可以正常工作,因此实际读取了属性。

如果我把文件src/main/resources/messages_en.properties,问题就解决了,但是我的问题是:找不到locale的时候不应该使用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 选项,但似乎不起作用。

你对我做错了什么有任何想法吗?如果您需要更多信息,请告诉我。

提前感谢您的宝贵时间。

【问题讨论】:

    标签: java spring jsp internationalization resources


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2017-05-16
      • 2013-02-10
      • 1970-01-01
      • 2012-06-11
      相关资源
      最近更新 更多