Spring中的国际化资源以及视图跳转
一、SpringMVC对国际化的支持
SpringMVC进行资源国际化主要是通过ResourceBundleMessageSource实现的,xml如下配置:
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>
资源文件如下:
i18n.properties:
i18n.username=Username
i18n.password=Password
i18n_zh_CN.properties:
i18n.username=\u7528\u6237\u540D(用户名)
i18n.password=\u5BC6\u7801(密码)
i18n_en_US.properties:
i18n.username=Username
i18n.password=Password
测试页面如下
<!-- 加载的为i18n_zh_CN.properties 与语言无关 -->
<fmt:bundle basename="i18n_zh_CN" prefix="i18n.">
<fmt:message key="username"></fmt:message>
</fmt:bundle> <!-- 资源国际化 -->
<br><br>
<fmt:message key="i18n.username"></fmt:message>
<br><br> <fmt:message key="i18n.password" ></fmt:message>
<br><br>
这样的话,当SpringMVC检测到语言为en时,页面显示将为英文;当语言为zh时,页面显示将为中文。
二、SpringMVC处理转发和重定向
spring控制器返回最后一个ModelAndView时,其中的urName可以是一个视图名称,这样视图解析器负责解析后将响应流写回客户端。也可以通过return redirect/forward:url方式转到另一个控制器进行处理。
redirect代表重定向,若使用 return “redirect:/hello”; 浏览器的地址栏会变为*****/hello。
而forward表示转发,若SpringMVC处理函数使用 return “forward:/hello”;形式的语句,浏览器的地址栏不会变,但是有新的视图返回来。
1、redirect方式
return redirect:url相当于”response.sendRedirect()”。采用这种方式浏览器地址栏最后显示的路径是重定向后的新的路径。
具体流程如下:服务器端会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后服务器发新的response给浏览器。这时页面收到的request是一个新的从浏览器发来的请求。这种方式的结果是:
(1)在重定向前后有两个不同的request对象,重定向前后的两个控制器在request上的参数(request.getParameter())和request属性(request.getAttribute())不能共享;
(2)如果重定向前后的两个控制器都配置在spring 拦截器范围内,这样拦截器会拦截前后两个request,即会拦截两次;
(3)最后返回到浏览器后,因为地址栏显示的是重定向后的url,所以刷新页面时只会执行后面的url映射的控制器。
示例:
JSP 页面:
<a href="springmvc/testRedirect">Test Redirect</a>
控制器代码:
//方法所在的类被@RequestMapping("/springmvc")所修饰
@RequestMapping("/testRedirect")
public String testRedirect(){
System.out.println("testRedirect");
return "redirect:/index2.jsp";//这里的'/'表示相对于项目根目录
}
这样映射的页面将会在index2.jsp,并且url将是 项目根目录/index2.jsp。也就是说这会忽略在类上修饰的@RequestMapping。
若改为return "redirect:index2.jsp";,则url将是 项目根目录/springmvc/index2.jsp,这时类上修饰的@RequestMapping也会起作用。
2、forward方式:
return forward:url相当于request.getRequestDispatcher().forward(request,response),这种方式的外部特征是浏览器地址显示的路径是转发前的路径。工作方式如下:forward 发生在服务器内部,在前一个控制器处理完毕后,直接进入下一个控制器处理, 并将转发后的控制器的response发给浏览器。这种方式的结果是:
(1)转发前后是同一个request,后一个控制器可共享前一个控制器的参数与属性;
(2)因为是同一个request,拦截器只会拦截前一个url,如果前一个url在映射时未配置到拦截器拦截,则拦截后一个url,即只拦截一次;
(3)最后返回到浏览器后,因为地址栏显示的是转发前的url,所以刷新页面时会依次执行前后两个控制器。
示例:
index.jsp 页面
<a href="springmvc/testForward">Test Redirect</a>
控制器代码:
//方法所在的类被@RequestMapping("/springmvc")所修饰
@RequestMapping("/testForward")
public String testForward(){
System.out.println("testForward");
return "forward:/index2.jsp";
}
这样当我们点击浏览器链接,虽然页面URL没有变化,但是页面已经是index2.jsp的内容。
Spring中的国际化资源以及视图跳转的更多相关文章
- idea中springboot静态资源及页面跳转问题
1,静态资源放在resources/static下,html页面放在resources/templates下 2,在html中引入静态资源时,不用带static(对于路径来说是透明的) 3, 配置ht ...
- Spring 中的国际化Message的简单例子(ApplicationContext) 不跟框架集成的版本
首先,建立一个描述message的XML文件,名为messages.xml <?xml version="1.0" encoding="UTF-8" ...
- Spring中Resource(资源)的获取
1.通过Resource接口获取资源 Resource接口的实现类有: Resource接口继承了InputStreamSource 接口,InputStreamSource 接口中有一个方法:get ...
- Spring 中拦截器与过滤器的区别
spring 中拦截器 与servlet 的filter 有相似之处.比如二者都是aop 编程思想的体现都能实现权限检查,日志记录等. 不同之处 使用范围不同 Filter 是Servlet 规定的. ...
- Spring官网阅读(十七)Spring中的数据校验
文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...
- Spring的国际化资源messageSource
Spring中可以使用两个类加载资源文件:ReloadableResourceBundleMessageSource和ResourceBundleMessageSource. 可配置如下message ...
- Spring MVC资源绑定视图解析器
ResourceBundleViewResolver使用属性文件中定义的视图bean来解析视图名称. 以下示例显示如何使用Spring Web MVC框架中的ResourceBundleViewRes ...
- 一个简单的示例在spring boot中实现国际化
最近在网上找了一个有关账单管理的spring boot项目,其中有一部分是涉及显示国际化信息的,即将页面上的中英文进行转换.因为在这之前这部分内容没有接触过,所以在这记录下过程. 中文效果图如下所示: ...
- IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较
//代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...
随机推荐
- Hibernate分页功能数据重复问题
今天遇到一个很憋屈的问题那就是hibernate分页查询中出现重复数据,本来一直没有在意,以为是数据问题,但是一查程序和数据都没有问题,继续深入查看,找到问题了就是order By 时出的问题,唉.. ...
- dom元素父子容器互相调用控制
在html中普通的父容器调用子容器中的方法十分简单 因为这两个容器的所有方法和属性都在同一个dom模型中 可以直接控制和使用 但是如果子容器中是一个iframe标签又是怎样的情况? iframe请求另 ...
- 【共享单车】—— React后台管理系统开发手记:AntD Table高级表格
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- Solr 配置文件之schema.xml
schema.xml这个配置文件的根本目的是为了通过配置告诉Solr怎样建立索引. solr的数据结构例如以下: document:一个文档.一条记录 field:域.属性 solr通过搜索某个或某些 ...
- Android Gradle基础实践
1,gradle是全新的一种IDE编程环境,Android Studio集成了Gradle IDE 2,要下载gradle(比方gradle-2.10)解压.配置环境变量.比方G:\Program ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2
在编写获取路径方法前,我们先把角色须要的动画文件载入进来,角色的文件为png 和 plist格式. player1_anim.png.plist player1_anim.pn ...
- Activity的启动流程分析
Activity是Android应用程序的四大组件之中的一个,负责管理Android应用程序的用户界面,一般一个应用程序中包括非常多个Activity,他们可能执行在一个进程中.也可能执行在不同的进程 ...
- matplotlib画图实例:pyplot、pylab模块及作图參数
http://blog.csdn.net/pipisorry/article/details/40005163 Matplotlib.pyplot画图实例 {使用pyplot模块} matplotli ...
- 微软在GitHub上开放源代码
https://github.com/MSOpenTech 点击链接:openFrameworks :https://github.com/openframeworks/openFrameworks ...
- java中替换双引号 Java问题通用解决代码 Java问题通用解决代码
http://blog.csdn.net/newhappy2008/article/details/4785263 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...