`

spring的国际化问题

阅读更多
org.apache.jasper.JasperException: org.springframework.context.NoSuchMessageException: No message found under code 'zhiguFile.uri' for locale 'zh_CN'.
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:548)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:469)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
	org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1244)
	org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

 

spring国际化时出现了上面错误信息。

 

sping配置文件application-config.xml如下

 

	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basenames">
			<list>
                                <!-- 这就是出问题的地方 -->
				<value>classpath:config/messages</value>
			</list>
		</property>
	</bean>

 

配置的路劲的不对,导致国际化时找不到对应的信息。

 

项目结构如下

 

 

 

 以上问题的处理的方式是只需要修改为如下

 

	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>config/messages</value>
			</list>
		</property>
	</bean>

 

问题解决了。

 

在java代码中的使用方式为,这是一个验证

 

 如果表单提交回来的字段uri为空,则会使用zhiguFile.uri在配置messages.properties文件中对应属性值作为错误信息展示。jsp代码如下:

		<form:form action="/file/test" modelAttribute="zhiguFile">
			<form:input path="uri" />
			<form:errors path="uri" ></form:errors>
			<form:input path="spcs" />
			<form:button value="submit" ></form:button>
		</form:form>

编译的html代码如下

		<form id="zhiguFile" action="/file/test" method="post">
			<input id="uri" name="uri" type="text" value=""/>
			
			<input id="spcs" name="spcs" type="text" value=""/>
			<button type="submit" value="submit"></button>
		</form>

表单验证出错编译后html代码如下

<form id="zhiguFile" method="post" action="/file/test">

    <input id="uri" type="text" value="" name="uri"></input>
    <span id="uri.errors">

        uri不能为空

    </span>
    <input id="spcs" type="text" value="" name="spcs"></input>
    <button value="submit" type="submit"></button>

</form>

由上可以看出

<form:errors path="uri" ></form:errors>
被编译成了
    <span id="uri.errors">

        uri不能为空

    </span>

 好了,spring国际化的问题解决了,就是属性文件不用classpath配置,而是写相对路径

 

小结:spring 的国际化分为4个步骤

1.编写messages.properties文件

2.在spring的配置文件中引入messages.properties文件

3.编写一个验证器去实现spring的validator接口

4.绑定验证器到控制器

 

推荐两篇比较好的博客

http://www.cnblogs.com/HD/p/4123146.html

http://haohaoxuexi.iteye.com/blog/1812584

 

 

 

 

 

  • 大小: 60.5 KB
  • 大小: 21 KB
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics