我正在从 ResourceBundleMessageSource
更改为 ReloadableResourceBundleMessageSource
.
我已经更改了app-dispatcher-servlet.xml以反映ReloadableResourceBundleMessageSource的要求 . 从 <value>com.app.properties.windows</value>
到 <value>classpath:windows</value>
但我得到 NoSuchMEssageException
. 我怀疑它与我放置属性文件的位置有关,或者我没有正确链接它 .
文档:
它遵循不指定文件扩展名或语言代码的基本ResourceBundle规则,但可以引用任何Spring资源位置(而不是仅限于类路径资源) . 使用“classpath:”前缀,仍然可以从类路径加载资源,但在这种情况下,除“-1”(永久缓存)之外的“cacheSeconds”值可能无法可靠地工作 .
以下就是我的......
messages_en_US.properties
NotBlank.book.name = Enter something don't be lazy
应用程序 - 调度 - 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
堆栈跟踪
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是org.springframework.context.NoSuchMessageException:在代码'Size.book.ispn'下找不到区域设置'zh_CN'的消息 . org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979)org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)javax.servlet.http.HttpServlet.service(HttpServlet.java: 622)org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)javax.servlet.http.HttpServlet.service(HttpServlet.java:729)org.apache.tomcat.websocket.server.WsFilter.doFilter( WsFilter.java:52)根本原因org.springframework.context.NoSuchMessageException:在代码'Size.book.ispn'下找不到区域设置'zh_CN'的消息 . org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:159)com.app.controller.spaController.pageSpa(spaController.java:54)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl .invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:483)org.springframework.web.method.support.InvocableHandlerMethod .doInvoke(InvocableHandlerMethod.java:221)org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java :110)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)org.springframework.web.servlet.mvc.method.annotation.RequestMap pingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet . java:858)javax.servlet.http.HttpServlet.service(HttpServlet.java:622)org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)javax.servlet.http.HttpServlet.service(HttpServlet . java:729)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
执行的代码在控制器中
public class someController(){
@autowired
private MEssageSource messageSource;
public String pageSpa(Model model){
System.out.println("loading index page");
//System.out.println(((CustomMessageSource) messageSource).listMessageProperties("book", locale));
Locale locale = LocaleContextHolder.getLocale();
System.out.println(messageSource.getMessage("NotBlank.book.name", null, locale));
return "spa";
}
谢谢
2 回答
对我有用的是以下在WEB-INF下移动你的消息文件
更改配置如下
我尝试使用文档中指示的类路径前缀,但它不起作用
另见:Reloading of properties file which is loaded using setBundle
我最终做的就是这个
由于classpath:包含WEB-INF / class . 我只是明确地包含了我的属性文件的实际类路径 .
我不确定为什么遵循该文档不起作用 . 但这对我有用 . 希望这能帮助其他人度过痛苦的日子 .