上一篇文章总结了一下Spring MVC中实现国际化所需的配置,本文继上一文举一个完整的例子,我选择用XML的方式。我的场景是这样的:

访问一个页面时,这个页面有个表格,对表头中的列名实现国际化。

第一步:完成国际化配置

主要是配置用来定位资源文件的消息源和用来解析国际化的国际化解析器,都要配置在Spring的配置文件中

 1 <!--Spring MVC实现国际化 -->
 2     <!-- 第一步:配置消息源MessageSource用来加载对应的国际化属性文件:bean的ID名称只能是messageSource -->
 3     <!--第一种方式:配置ResourceBundleMessageSource:这种方式只能把资源文件放到指定的路径下,不能热加载,需要重启系统才能加载它 -->
 4     <!-- <bean id="messageResource"
 5         class="org.springframework.context.support.ResourceBundleMessageSource">
 6         <property name="defaultEncoding" value="UTF-8" />
 7         <property name="basename" value="msg" />
 8     </bean> -->
 9
10     <!--第二种方式:配置ReloadableResourceBundleMessageSource:这种方式只能把资源文件放到任何位置,不需要重启就能加载文件,并且可以设置刷新时间 -->
11     <bean id="messageSource"
12         class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
13         <!-- 默认编码方式 -->
14         <property name="defaultEncoding" value="UTF-8" />
15         <!-- 资源文件的前缀:多了一个classpath,如果资源文件在一个文件夹下,还要加上文件夹路径,否则报错 -->
16         <property name="basename" value="classpath:message/msg" />
17         <!-- 刷新时间 -->
18         <property name="cacheSeconds" value="3600" />
19     </bean>
20
21     <!-- 第二步:配置国际化解析器,有cookie和session两种方式,一般用session比较保险 -->
22     <!--第一种:配置cookie国际化解析器 -->
23     <!-- <bean id="localeResolver"
24         class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
25         cookie变量的名称
26         <property name="cookieName" value="lang" />
27         cookie超时时间
28         <property name="cookieMaxAge" value="20" />
29         默认使用简体中文
30         <property name="defaultLocale" value="zh_CN" />
31     </bean> -->
32
33     <!--第一种:配置session国际化解析器 -->
34     <bean id="localResolver"
35         class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
36         因为session有其自身定义的超时时间和编码,所以此处不需要设置
37         <property name="defaultLocale" value="zh_CN" />
38     </bean>

上面代码中,我配置了两种消息源和两种国际化解析器,其中注释掉的是不会热加载的消息源和cookie国际化解析器,因为它们都有一些缺陷,上一篇中已经介绍过。

第二步:配置拦截器

拦截器是在Spring MVC的配置文件中配置:

1 <!-- 配置国际化拦截器 -->
2     <mvc:interceptors>
3         <mvc:interceptor>
4             <mvc:mapping path="/**" />
5             <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
6                 <property name="paramName" value="language" />
7             </bean>
8         </mvc:interceptor>
9     </mvc:interceptors>

第三步:创建资源文件

我将这两个文件都放在src/main/resource下的message文件夹下,所以上面配置消息源时basename的值为classpath:message/msg,这一点需要注意。

1⃣️中文资源文件msg_zh_CN.properties

1 welcome=\u4F60\u597D \u4E16\u754C\uFF01
2
3 param_param_id=\u53C2\u6570ID
4 param_param_name=\u53C2\u6570\u540D\u79F0
5 param_param_desc=\u53C2\u6570\u63CF\u8FF0
6 param_param_time=\u5165\u5E93\u65F6\u95F4

中文使用的是unicode编码,这个不需要管,显示时不会乱码。

2⃣️英文资源文件msg_en_US.properties

1 welcome=hello world!
2 param_param_id=Param ID
3 param_param_name=Param Name
4 param_param_desc=Param Describer
5 param_param_time=Save Time

 第四步:创建页面

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
 5 <%@ taglib prefix="mvc" uri="http://www.springframework.org/tags/form"%>
 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 7 <html>
 8 <head>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <%
11     String root = request.getContextPath();
12     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
13             + root + "/";
14 %>
15 <script type="text/javascript"
16     src="<%=basePath%>jslib/jquery-1.8.3.min.js"></script>
17 <script type="text/javascript" src="<%=basePath%>jslib/jquery.form.js"></script>
18 <script type="text/javascript" src="<%=basePath%>js/param.js"></script>
19 <link href="<%=basePath%>css/param.css" type="text/css" rel="stylesheet">
20 <title>参数列表</title>
21 </head>
22 <body>
23     <div>
24         <table>
25             <thead>
26                 <tr>
27                     <td><spring:message code="param_param_id" /></td>
28                     <td><spring:message code="param_param_name" /></td>
29                     <td><spring:message code="param_param_desc" /></td>
30                     <td><spring:message code="param_param_time" /></td>
31                 </tr>
32             </thead>
33             <tbody>
34                 <c:forEach var="paramItem" items="${paramList }">
35                     <tr>
36                         <td>${paramItem.paramId}</td>
37                         <td>${paramItem.paramName }</td>
38                         <td>${paramItem.paramDesc }</td>
39                         <td>${paramItem.pramTime }</td>
40                     </tr>
41                 </c:forEach>
42             </tbody>
43         </table>
44     </div>
45 </body>
46 </html>

上面代码中加粗的红色部分是重点内容:

  • 首先要导入spring标签库,因为jsp使用的是spring mvc国际化;
  • 使用<spring:message>标签获取国际化文件中的值;

第五步:创建控制器

 1 /*
 2  * 测试Spring MVC中传递参数的方式
 3  */
 4
 5 @Controller
 6 @RequestMapping("/param")
 7 public class ParamController {
 8
 9     @Autowired
10     @Qualifier("paramService")
11     ParamService paramService = null;
12
13     @RequestMapping(value = "index", method = RequestMethod.GET)
14     public ModelAndView getParam() {
15         ModelAndView mView = new ModelAndView();
16         List<Param> paramList = paramService.getAllParams();
17         mView.addObject("paramList", paramList);
18         mView.setViewName("param/indexParam");
19         return mView;
20     }
21 }

控制器中主要就是获取列表并渲染到indexParam视图中,这样在页面就能获取到列表数据了,下面进行测试;

第六步:测试

在浏览器输入URL:http://127.0.0.1:8080/mvc/param/index,结果如下:

因为模式是简体中文,所以不需要输入language参数就能获取资源文件内容实现国际化,下面将URL改为这样

http://127.0.0.1:8080/mvc/param/index?language=en_US,即加上参数language,并定义为英文,结果如下:

表格表头的列名变成英文,说明国际化成功。

以上就是完整的实例。

转载于:https://www.cnblogs.com/hellowhy/p/9752217.html

Spring MVC(十六)--Spring MVC国际化实例相关推荐

  1. spring boot(十五)spring boot+thymeleaf+jpa增删改查示例

    快速上手 配置文件 pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 <dependency><groupId>org.springframework.bo ...

  2. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper

    1. 概述 本文的内容包括如下内容: Spring Boot集成mybatis Spring Boot集成pagehelper分页插件,定义分页的相关类 实现工具类:model转dto,实现数据层和传 ...

  3. (转)Spring Boot(十六):使用 Jenkins 部署 Spring Boot

    http://www.ityouknow.com/springboot/2017/11/11/spring-boot-jenkins.html enkins 是 Devops 神器,本篇文章介绍如何安 ...

  4. Pro ASP.NET MVC –第六章 MVC的基本工具

    在本章,我们将介绍每个MVC程序员"武器库"的三个重要工具:依赖注入容器.单元测试框架和mock工具.在本书,对于三个工具分别都只用了一种方式实现,但每个工具都还有其他的实现方式. ...

  5. RabbitMq(十六)单机多实例集群搭建步骤介绍

    在单机环境搭建rabbitmq多节点集群步骤如下: 首先保证当前安装的rabbitmq程序是正常安装,并正常启动过的,首先需要先停掉rabbitmq节点,保证服务未在运行中(可以激主机重启一下,或通过 ...

  6. 第三十六篇:WinUSB调试实例

    有人问,前面的博文,分别列出了USB xHCI, USB3 HUB, UCX01000的符号有什么用? 答案是,虽然我们不能看到MICROSOFT 的源代码,但通过这些符号,可以帮助我们调试USB子系 ...

  7. Spring Boot Ajax实例(十六)

    这篇博文主要用于新手学习Spring Boot,同时也记录自己学习的过程- 文章内容主要来源于易百教程 本文将展示如何使用jQuery.ajax将HTML表单请求发送到Spring REST API并 ...

  8. Spring Security(三十六):12. Spring MVC Test Integration

    Spring Security provides comprehensive integration with Spring MVC Test Spring Security提供与Spring MVC ...

  9. tomcat + spring mvc原理(六):tomcat WAR包的部署与加载

    tomcat + spring mvc原理(六):tomcat WAR包的部署与加载 前言 监控的启动原理 状态监听 部署项目 前言 单独部署的tomcat服务器在运行中,当开发人员或者运维人员将开发 ...

  10. Spring、Mybatis、Spring MVC整合实例

    Spring.Mybatis.Spring MVC整合实例笔记 源码地址:https://gitee.com/name168/SSM_Demo 1.Maven web项目创建(IDEA) 2.SSM整 ...

最新文章

  1. 「特征工程」之零基础入门数据挖掘
  2. pyhton 把文字放入图片里_藏在京城老字号里的六道功夫菜!久违了!!
  3. 电大计算机应用模块四实2010,国家开放大学《计算机应用基础》考试与答案形考任务模块2Word2010文字处理系统—客观题测验答案.docx...
  4. 编写简单的UDP应用
  5. Express 工具库中的 Application 对象
  6. mysql主主同步修复
  7. Python使用tkinter编写图片浏览程序
  8. linux can设备,Linux CAN编程详解
  9. ashx比较完美的权限处理(适合页面,不适合安卓远程读取接口)
  10. NIOS II 烧写epcs中遇到的问题
  11. 【爬虫学习笔记day44】5.2. (scrapy案例二)阳光热线问政平台爬虫
  12. 公司 | 四年狂奔,少儿编程准独角兽小码王的盈利逻辑是什么?
  13. 2008服务器系统开启ftp,win 2008服务器开启FTP功能
  14. 使用Jmeter输出错误响应结果到日志
  15. 联想拯救者R7000_2020款黑屏解决方案
  16. Hi3518EV300芯片linux系统配置USB Camera功能
  17. 【教程】PDF开发工具Spire.PDF 教程:使用C#从PDF中的特定矩形区域中提取文本
  18. 2018最新史上最全SpringBoot视频教程(完整)
  19. 互联网产品快速迭代下是否需要写详细测试用例
  20. 关于电子科技大学学生睡眠情况调查分析

热门文章

  1. 拓端tecdat|python图工具中基于随机块模型动态网络社团检测网络图
  2. 卷积神经网络-加载数据集
  3. 2018 为自己加油!
  4. error LNK2038 RuntimeLibrary 不匹配的解决
  5. 2021-08-05查询排序分页语句
  6. 以太坊 ERC-20 ERC-721 ERC-1155区别对比
  7. latex 可视化生成表格代码
  8. 区块链 Fisco bcos 智能合约(12)-Solidity的基础特性
  9. python判断GET和POST有没有某个参数
  10. 数组排序-冒泡排序和选择排序