一、JstlView 视图
1、若项目中使用了 JSTL,则 SpringMVC 会自动把视图由 InternalResourceView 转为 JSTLView(断点调试,将 JSTL 的 jar 包增加到项目中,视图解析器会自动修改为 JSTLView)
2、若使用 JSTL 的 fmt 标签则需要在 SpringMVC 的配置文件中配置国际化资源文件
3、若希望直接响应通过 SpringMVC 渲染的页面,可以使用 mvc:view-controller 标签实现
二、使用 JstlView
方式一:导包导入了 jstl 的时候会自动创建一个 jstlView,可以快速方便的支持国际化;
方式二:在 InternalResourceceViewResolver 中添加配置
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
三、JstlView 快捷的国际化功能
支持国际化:
JavaWeb 国际化步骤:
1. 得到一个 Locale 对象
2. 使用 ResourceBundle 绑定国际化资源文件
3. 使用 ResourceBundle.getString("key"); 获取国际化配置文件中的值
4. web 页面的国际化,fmt 标签库来做;
使用 JstlView 后:
1. 让Spring管理国际化资源文件
2. 直接去页面使用 <fmt:message>
1、配置国际化文件
i18n_en_US.properties
username=USERNAME
password=PASSWORD
loginBtn=SUBMIT
-----
i18n_zh_CN.properties
username=用户名
password=密码
loginBtn=登录
2、在 springmvc.xml 中配置jstlView 视图
<!--可以导入 JSTL 包,fmt:message-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
</bean>
<!-- 让SpringMVC管理国际化资源文件,配置一个资源文件管理器 id 必须是messageSource -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- basename 指定基础名-->
<property name="basename" value="i18n"></property>
</bean>
3、添加页面链接
<a href="/toLoginPage">去登录</a><br>
4、添加后端控制器
@RequestMapping(value = "/toLoginPage")
public String toLoginPage() {
System.out.println("toLoginPage...");
return "login";
}
5、跳转到登陆页面
成功页面(/WEB-INF/views/success.jsp)使用fmt标签库
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>登录页</title>
</head>
<body>
<form action="">
<fmt:message key="username" /><input><br>
<fmt:message key="password" /><input><br>
<input type="submit" value='<fmt:message key="loginBtn" />'>
</form>
</body>
</html>
三、源码跟踪
jstl标签 jar包(断点调试,这时的View对象就是JstlView)
注意:
① 国际化一定要经过 SpringMVC 的视图解析流程,不能直接由 Tomcat 运行,SpringMVC 会创建一个 JstlView,快捷的支持国际化功能;
② 也不能使用 forward 前缀,使用 forward 进行转发,会使用 InternalResourceView,并且没有国际化信息;
只有用了 createView() 方法才会把 locale 国际化信息传递进去。