视图解析全网最细理解

1,方法执行后的返回值会作为页面地址参考,转发或者重定向到页面
2,视图解析器可能会进行页面地址的拼串

ctrl+shift+T 查看继承树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

jstlView支持便捷的国际化功能

导包导入了jstl的时候会自动创建一个jstlView,可以快速方便的支持国家化功能;
可以支持快速国际化

  1. 回顾javaWeb国际化步骤
    1)得到一个Locale对象;
    2)使用ResourceBundle绑定国际化资源文件
    3)使用ResourceBundle.getString(“key”);获取到国际化配置文件中的值
    4)web页面的国际化,fmt标签库来做:
			<fmt:setLocale>
			<fmt:setBundle>
			<fmt:message>

5)有了jstlView以后:

  1. 让Spring管理国际化资源文件
<!-- 让SpringMVC管理国际化资源文件,配置一个资源文件管理器 -->
	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<!-- 指定基础名 -->
		<property name="basename" value="i18n"></property>
	
	</bean>
  1. 直接区页面使用<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>");

自定义视图和视图解析器的步骤:

  1. 编写自定义的视图解析器和视图实现类

  2. 视图解析器必须放在ioc容器中

<!-- 自定义的视图解析器 ,数字越小优先级越高-->
	<bean class="com.lyj.view.MyMeiNvViewResolver">
		<property name="order" value="1"></property>
	</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值