1,方法执行后的返回值会作为页面地址参考,转发或者重定向到页面
2,视图解析器可能会进行页面地址的拼串
ctrl+shift+T 查看继承树
jstlView支持便捷的国际化功能
导包导入了jstl的时候会自动创建一个jstlView,可以快速方便的支持国家化功能;
可以支持快速国际化
- 回顾javaWeb国际化步骤
1)得到一个Locale对象;
2)使用ResourceBundle绑定国际化资源文件
3)使用ResourceBundle.getString(“key”);获取到国际化配置文件中的值
4)web页面的国际化,fmt标签库来做:
<fmt:setLocale>
<fmt:setBundle>
<fmt:message>
5)有了jstlView以后:
- 让Spring管理国际化资源文件
<!-- 让SpringMVC管理国际化资源文件,配置一个资源文件管理器 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 指定基础名 -->
<property name="basename" value="i18n"></property>
</bean>
- 直接区页面使用
<fmt:message>
取值
先引入标签库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:message key="welcomeinfo" />
<form action="">
用户名:<fmt:message key="username"/><input /><br>
密码:<fmt:message key="password"/> <input /><br>
<input type="submit" value='<fmt:message key="loginBtn"/>'/><br>
</form>
国际化一定要过SpringMVC的视图解析流程,人家会创建一个jstlView帮你快速国际化
也不能写forward:/
扩展:加深视图解析器和视图对象的理解
视图解析器根据方法的返回值得到视图对象,多个视图解析器都会尝试能否得到视图对象,视图对象不同就可以具有不同功能。
让我们的视图解析器工作;
public class MyMeiNvViewResolver implements ViewResolver,Ordered{
private Integer order=0;
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
// TODO Auto-generated method stub
//根据视图名返回视图对象
//meinv:/gaoqing meinv:/dama
//forward:/login.jsp
if(viewName.startsWith("meinv:")){
return new MyView();
}else{//不能处理返回null
return null;
}
}
@Override
public int getOrder() {
// TODO Auto-generated method stub
return order;
}
/**
* 自己写的改变视图优先级的方法
*/
public void setOrder(Integer order){
this.order=order;
}
得到我们的视图对象;
/**
* 自定义视图
* @author Administrator
*
*/
public class MyView implements View{
/**
* 返回数据的内容类型
*/
@Override
public String getContentType() {
// TODO Auto-generated method stub
return "text/html";
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println("之前保存的数据:"+model);
response.setContentType("text/html");
List<String> vn = (List<String>) model.get("video");
response.getWriter().write("haha<h1>即将展示精彩内容</h1>");
for (String string : vn) {
response.getWriter().write("<a>下载"+string+".avi</a><br>");
}
}
}
我们的视图对象自定义渲染逻辑
response.getWriter().write("haha<h1>即将展示精彩内容</h1>");
自定义视图和视图解析器的步骤:
-
编写自定义的视图解析器和视图实现类
-
视图解析器必须放在ioc容器中
<!-- 自定义的视图解析器 ,数字越小优先级越高-->
<bean class="com.lyj.view.MyMeiNvViewResolver">
<property name="order" value="1"></property>
</bean>