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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


by Shawn Chen,2018.1.27日,下午。

SpringMVC实现国际化过程中所遇问题的更多相关文章

  1. SpringMVC在使用过程中的错误

    HTTP Status 500 - Request processing failed; nested exception is org.springframework.validation.Bind ...

  2. 如何在springmvc的请求过程中获得地址栏的请求

    由于spring的dispatchservlet会通过当前的handlermapping来将当前地址栏的请求映射为实际的项目目录结构,所以使用普通的request.getRequestURL()是无法 ...

  3. 开启mysql远程访问过程中所遇常见问题的解决办法

    MYSQL ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.10.210' (111) 解决方法 今天在测试MySQL的连接 ...

  4. springmvc转springboot过程中访问jsp报Whitelabel Error Page错误

    前言: 虽然springboot内嵌了一个tomcat,但是这个内嵌的tomcat不支持jsp页面,所以需要引入其他包 解决: maven引入以下包即可 <dependency> < ...

  5. Springmvc上传过程中遇到的错误

    问题1: org.springframework.web.util.NestedServletException: Handler processing failed; nested exceptio ...

  6. springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...

  7. springmvc配置过程中遇到的一些问题总结

    springmvc配置过程中遇到的一些问题总结 1.配置tomcat过程中的错误: 2.配置web.xml中DispatchServlet报红(配置好已有依赖条件下) 解决的办法: 因为新添加依赖,m ...

  8. springMVC+spring+mybatis整合过程中遇到的问题

    今天在配置SSM整合的过程中遇到了几个错误,折腾了好久,具体如下 1.java.lang.IllegalArgumentException: Mapped Statements collection ...

  9. springMVC之国际化

    1.工程结构 2.jar包 3.配置文件spring-config.xml,springMVC配置文件 <?xml version="1.0" encoding=" ...

随机推荐

  1. SQL Server 怎么在分页获取数据的同时获取到总记录数

    SQL Server 获取数据的总记录数,有两种方式: 1.先分页获取数据,然后再查询一遍数据库获取到总数量 2.使用count(1) over()获取总记录数量 SELECT * FROM ( SE ...

  2. Java Date类的使用总结

    Date类表示特定的瞬间,精确到毫秒. 有2种方法可以创建Date对象(这里不考虑已过时的构造函数) 1.public Date()——分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫 ...

  3. layui layer select 选择被遮挡

    在编程的时候, layer弹窗中的select 经常会遇到被遮挡的情况: 解决方法:在页面里面找到对应div的class 给overflow新的属性visible即可(默认值.内容不会被修剪,会呈现在 ...

  4. CSS单位【记录】

    1.长度 2.角度 3.时间 4.分辨率 5.颜色 6.函数 7.生成内容 8.图像 9.数字 1.长度 <length>:数字和单位之间没有空格,0之后的长度单位是可选的 相对长度单位 ...

  5. vuejs2.0实现分页组件,使用$emit进行事件监听数据传递

    上一篇文章介绍了vuejs实现的简单分页,如果我有几个页面都需要有分页效果,不可能每个页面都去复制一下这段代码吧,意思是封装一下,变成通用的组件. 首先使用基础 Vue 构造器,创建一个“子类”,Vu ...

  6. 2018-08-13 中文编程讨论组(GitHub)社区守则一周年修订

    原址在此 社区守则 大原则 求同存异 就事论事 己所不欲勿施于人 注: 在讨论组成立一周年之际, 对行为规范进行一些细化 内 这部分所有内容同样适用于对外 回归技术 所有与中文编程没有直接关系的话题都 ...

  7. Dynamics 365 Online-Unified User Interface

    为了加强界面的一致性,提高用户体验,Dynamics 365 Online V9发布了新的Interface:Unified User Interface. 区别于旧的Regular UI,UUI自适 ...

  8. Nginx 集群 反向代理多个服务器

    准备多个服务器,使用 nginx 先做好代理(我这里只有一台服务器,就拷贝两个 tomcat 了,端口分别设置为 8081 和 8082) 1,复制 tomcat cp -r apache-tomca ...

  9. Git 常用命令及操作总结

    Git常用命令及操作总结 By:授客 QQ:1033553122 利用TortoiseGit克隆源码库到本地 1.安装TortoiseGit 2.打开Git,进入到源码库,点击图示红色选框框选按钮,弹 ...

  10. View体系第一篇:基础

    View体系的学习内容为学习刘望舒先生博客总结的内容,大家可到他的博客看到更详细的内容. 一.view之间的继承关系 Viewground用来包裹其他view.在平常的使用中,我们不会直接用到View ...