第四节:SpringMVC 视图解析【4】JstlView 便捷的国际化功能


一、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. 直接去页面使用 

  1、配置国际化文件

i18n_en_US.properties
username=USERNAME
password=PASSWORD
loginBtn=SUBMIT

-----
i18n_zh_CN.properties
username=用户名
password=密码
loginBtn=登录

  2、在 springmvc.xml 中配置jstlView 视图

    
    <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>

    
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        
        <property name="basename" value="i18n">property>
    bean>

  3、添加页面链接

去登录

  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='key="loginBtn" />'>
form>
body>
html>

三、源码跟踪

  jstl标签 jar包(断点调试,这时的View对象就是JstlView)

  

   注意:

  ① 国际化一定要经过 SpringMVC 的视图解析流程,不能直接由 Tomcat 运行,SpringMVC 会创建一个 JstlView,快捷的支持国际化功能;

  ② 也不能使用 forward 前缀,使用 forward 进行转发,会使用 InternalResourceView,并且没有国际化信息;

   只有用了 createView() 方法才会把 locale 国际化信息传递进去。