我正在从ResourceBundleMessageSource
更改为ReloadableResourceBundleMessageSource
。
我已经更改了app-dispatcher-servlet.xml以反映ReloadableResourceBundleMessageSource的要求。从<value>com.app.properties.windows</value>
到<value>classpath:windows</value>
但我得到了NoSuchMEssageException
。我怀疑它与我放置属性文件的位置有关,或者我没有正确链接它。
文档:
遵循基本的ResourceBundle规则 没有指定文件扩展名或语言代码,但可以参考 任何Spring资源位置(而不是限制为classpath 资源)。使用&#34;类路径:&#34;前缀,资源仍然可以加载 从类路径,但&#34; cacheSeconds&#34; &#34; -1&#34;以外的值(缓存 永远)在这种情况下可能无法可靠地工作。
以下是我所拥有的......
NotBlank.book.name = Enter something don't be lazy
APP-调度-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:Request 处理失败;嵌套异常是 org.springframework.context.NoSuchMessageException:未找到任何消息 根据代码&#39; Size.book.ispn&#39;对于语言环境&#39; zh_CN&#39;。 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:未找到任何消息 根据代码&#39; Size.book.ispn&#39;对于语言环境&#39; zh_CN&#39;。 org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:159) com.app.controller.spaController.pageSpa(spaController.java:54) sun.reflect.NativeMethodAccessorImpl.invoke0(原生方法) 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.RequestMappingHandlerAdapter.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";
}
谢谢
答案 0 :(得分:1)
对我有用的是以下内容 在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>
我尝试使用文档中指出的类路径前缀,但它不起作用
另请参阅:Reloading of properties file which is loaded using setBundle
答案 1 :(得分:0)
我最终做的是这个
<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>
由于classpath:包含WEB-INF / class。我只是明确地包含了我的属性文件的实际类路径。
我不确定为什么遵循该文档不起作用。但这对我有用。希望这能帮助其他人度过痛苦的日子。