NoSuchMessageException-Spring重载ResourceBundleMessageSource

NoSuchMessageException-Spring重载ResourceBundleMessageSource,spring,spring-mvc,Spring,Spring Mvc,我正在从ResourceBundleMessageSource更改为可重新加载的ResourceBundleMessageSource 我已更改了app-dispatcher-servlet.xml以反映可重新加载的ResourceBundleMessageSource的要求。从com.app.properties.windows到classpath:windows,但我没有收到任何消息异常。我怀疑这与我把我的属性文件放在哪里有关,或者我没有正确链接它 文件: 它遵循基本的ResourceBun

我正在从ResourceBundleMessageSource更改为可重新加载的ResourceBundleMessageSource

我已更改了app-dispatcher-servlet.xml以反映可重新加载的ResourceBundleMessageSource的要求。从com.app.properties.windows到classpath:windows,但我没有收到任何消息异常。我怀疑这与我把我的属性文件放在哪里有关,或者我没有正确链接它

文件:

它遵循基本的ResourceBundle规则 不指定文件扩展名或语言代码,但可以参考 任何Spring资源位置,而不限于类路径 资源。使用classpath:前缀,仍然可以加载资源 从类路径,但cacheSeconds值不是-1缓存 在这种情况下,“永远”可能无法可靠地工作

下面是我所拥有的

消息\u en\u US.properties

NotBlank.book.name = Enter something don't be lazy
app-dispatcher-servlet.xml

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:messages</value>
            <value>classpath:windows</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8" />

</bean>

// some i18n and localization bean

谢谢你

对我有效的方法如下 在WEB-INF下移动消息文件

按如下所示更改配置

<bean id="messageSource"
  class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>WEB-INF/messages</value>
            <value>WEB-INF/windows</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8" />
    <property name="cacheSeconds">
        <value>1</value>
    </property>
</bean>
我尝试使用文档中指出的类路径前缀,但没有成功


另请参见:

我最终要做的是

<bean id="messageSource"
    class="com.app.service.CustomMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:com/app/properties/messages</value>
            <value>classpath:com/app/properties/windows</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8" />

</bean>
因为类路径:包含WEB-INF/class。我只是显式地包含了属性文件的实际类路径


我不知道为什么跟随医生不起作用。但这对我很有效。希望这能帮助其他人摆脱痛苦。

你能分享堆栈跟踪和读取消息的代码吗我添加了堆栈跟踪我认为你应该把消息资源文件放在WEB-INF下的资源文件夹中,默认情况下应该在那里。您尝试过我下面的答案吗?@VPK文档:但是可以引用任何Spring资源位置,而不限于类路径资源。我想用可重新加载的。。。。没关系。除非我不明白医生的意思谢谢。。。让我试试这个。。如果我的类路径错误,请更正:包含WEB-INF/class。这是正确的吗?我只是不明白为什么它不工作……类路径包含WEB-INF/Class。一般来说,我没有使用classpath:但我认为tomcat中只有WEB-INF是可用的
<bean id="messageSource"
    class="com.app.service.CustomMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:com/app/properties/messages</value>
            <value>classpath:com/app/properties/windows</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8" />

</bean>