SpringMVC实现国际化过程中所遇问题

摘要:
注意:当然,springmvc默认servlet是用xml配置的,否则,直接访问静态资源文件可能会导致404问题。② 还可能存在无法更改HTTP的问题。接受读取器使用不同的区域设置解决策略。② 修改web对于XML中DispatcherServlet的配置,相应地配置主页索引控制器,如图所示:注意图中所示的配置,然后通过控制器转发主页以实现主页国际化。

前言:在利用SpringMVC实现国际化的过程中,看似简单,实则还是遇到了一些小问题,现在笔者对所遇问题总结如下。

注:笔者所用的编辑器为Intellij IEDA 14.1.7版本


1.国际化资源文件路径问题

SpringMVC实现国际化过程中所遇问题第1张

如图,国际化资源放置位置带有目录,则在springmvc.xml配置文件中对国际化资源文件的配置如下。

SpringMVC实现国际化过程中所遇问题第2张

注:①注意basename的写法,这里是带有目录的:前一个message为目录名,后一个message为国际化基础文件名,具体国际化文件的加载方式请查阅相关资料。

       ②如果国际化资源文件直接放在resources目录下,则basename的值直接为国际化基础文件名,如此处则为p:basename="message"

       ③如果国际化资源文件在包里,则这里的写法是p:basename="com.xx.xx.message"

       ④如果出现国际化不成功,可能出现的原因就是该处的basename属性不对,应该检查国际化资源文件放置的位置,是否存目录。

2.关于首页国际化不成功问题

当web.xml文件进行如下配置时,首页的国际化很可能会出现显示???message.username???的情况。

SpringMVC实现国际化过程中所遇问题第3张

注:当然这里springmvc.xml中对默认servlet进行了相应配置,不然直接访问静态资源文件可能会出现404问题。如图。

SpringMVC实现国际化过程中所遇问题第4张

当对首页进行国际化的时候,可能就会出现???message.username???的情况(注:笔者使用的是fmt标签进行国际化),具体原因:通过上述配置,在访问首页jsp的时候,请求不会通过DispatcherServlet,因此不能请求国际化资源文件,具体解决方法如下图(后面笔者会提出另一种解决方案)。

SpringMVC实现国际化过程中所遇问题第5张

将原来的fmt标签,包装一层即可解决上述问题,注意basename的写法,带有目录

注:笔者的国际化资源文件配置如下:

SpringMVC实现国际化过程中所遇问题第6张

3.上述解决方案,虽然解决了首页国际化问题,但接下来可能又会遇到如下问题:

①在国际化时一般首页上会有语言转换按钮,进行中英文的切换。由于我们首页使用的是静态jsp页面,并不会通过DispatcherServlet转发,因此在进行切换的时候会出现如何将首页跳转到首页问题

②还有可能出现Cannot change HTTP accept header - use a different locale resolution strategy问题。

在解决上述两个问题前,首先笔者的拦截器配置如下:

SpringMVC实现国际化过程中所遇问题第7张

注意这里SessionLocalResolver,其bean的id值必须为localeResolver,不然就会报上述的②问题,特别注意。因此第②问题的解决方案如图所标记。

对于首页中英文切换跳转问题,笔者采用如下“双首页”的形式进行。

(1)何为“双首页”,如图所示(即在webapp目录下存在一个index.jsp(这里标注为A),而在WEB-INF目录下也存在一个index.jsp)。

SpringMVC实现国际化过程中所遇问题第8张

(2)具体实现方法,在A页面中进行跳转,对index/index.jsp进行请求,这样即可通过DispatcherServlet进行转发,具体代码如下图所示。

SpringMVC实现国际化过程中所遇问题第9张

注:A页面中只存在这一行代码。

(3)在Controller中写一个index的控制器,代码如下:

SpringMVC实现国际化过程中所遇问题第10张

注:这里还需要进行视图解析器的配置,本文未给出,读者可查阅相关资料进行配置。

通过上述操作,即可进行首页国际化的显示,并且不会出现???message.username???的现象。fmt标签也不用进行包装,如下写法即可。

SpringMVC实现国际化过程中所遇问题第11张

(4)在首页(index/index.jsp)进行中英文切换时,添加如下两个按钮。

SpringMVC实现国际化过程中所遇问题第12张

注:lang为拦截器中配置的参数名;language为控制器

language控制器的具体代码如下:

SpringMVC实现国际化过程中所遇问题第13张

注意:此处采用redirect的方式,重定向到index控制器中,解决了浏览器地址栏中出现/language?lang=en_US的情况。

注:其实不采用“双首页”的形式也可以实现上述操作,具体方法:

①在webapp下没有index.jsp页面,index.jsp页面只存在于WEB-INF下。

②修改web.xml中DispatcherServlet的配置,将首页index控制器配置也进行相应配置 ,如图:

SpringMVC实现国际化过程中所遇问题第14张

注意如图所示的配置,再通过控制器进行首页转发,即可实现首页国际化问题。

笔者习惯通过“双首页”的方式进行首页的访问,笔者觉得这样在web.xml中的配置更为优雅,(#^.^#)


by Shawn Chen,2018.1.27日,下午。 

免责声明:文章转载自《SpringMVC实现国际化过程中所遇问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(专题四)06 matlab绘图选项卡PowerShell初探下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringMVC in IDEA开发实践

按照上篇装过Tomcat之后。 本机本来装了IDEA和Maven。 参考以下这篇 https://my.oschina.net/gaussik/blog/385697 《使用IntelliJ IDEA开发SpringMVC网站(一)开发环境》 其中初始化项目的时候非常慢,需要参考以下这篇来进行: http://www.cnblogs.com/beiyere...

SpringMVC介绍及参数绑定

本节内容: SpringMVC介绍 入门程序 SpringMVC架构 SpringMVC整合MyBatis 参数绑定 SpringMVC和Struts2的区别 一、SpringMVC介绍 1. 什么是SpringMVC Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出...

SpringMVC加载配置Properties文件的几种方式

最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定、URL映射的文章都很多了,写这篇博客主要总结一下SpringMVC加载配置Properties文件的几种方式 1.通过context:property-placeholde实现配置文件加载   1.1、在...

使用纯注解与配置类开发springMVC项目,去掉xml配置

最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到,完全可以使用注解与配置类开发springmvc项目,去掉配置,这里就学习一下! 先新建一个mvc项目: 配置好目录结构之后,就可以配置环境了,不过不用xml...

在springmvc中配置jedis(转)

主要学习https://github.com/thinkgem/jeesite。一下代码均参考于此并稍作修改。 1.jedis 首先,需要添加jedis: <!--jedis--> <dependency> <groupId>redis.clients</groupId> &l...

SpringBoot入门篇

一    什么是springboot Spring官网:http://spring.io/projects SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: Springboot不是什么真正意义上的新框架,就像maven整合了所有的jar包,spring boot整合了所有常...