欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自定义视图和自定义视图解析器

程序员文章站 2022-04-15 22:52:16
有的时候 SpringMVC 框架提供的视图解析器不能满足我们的需求,这时候我们可以来自定义视图以及视图解析器来完成定制的功能。 主要分为以下三步: 编写自定义视图实现类 编写视图解析器 在配置文件中将自定义的视图解析器注入ioc容器中 1、编写自定义视图实现类: 2、编写视图解析器: 3、在配置文 ......

有的时候 springmvc 框架提供的视图解析器不能满足我们的需求,这时候我们可以来自定义视图以及视图解析器来完成定制的功能。

主要分为以下三步:

  • 编写自定义视图实现类
  • 编写视图解析器
  • 在配置文件中将自定义的视图解析器注入ioc容器中

1、编写自定义视图实现类:

import java.util.map;

import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;

import org.springframework.web.servlet.view;

// 实现 view 接口才能让框架知道这是一个视图
public class myview implements view {

	@override
	public string getcontenttype() {
		return "text/html";
	}

	@override
	public void render(map<string, ?> model, httpservletrequest request, httpservletresponse response)
			throws exception {
		// 编写渲染视图页面的业务逻辑
		// 可以在这里取得 model 中保存的数据
                // 可以使用 request 和 response 进行请求和响应
	}

}

2、编写视图解析器:

import java.util.locale;

import org.springframework.core.ordered;
import org.springframework.web.servlet.view;
import org.springframework.web.servlet.viewresolver;

// 实现 viewresolver 接口来让框架知道这是一个视图解析器,实现 ordered 接口来进行排序
public class myviewresolver implements viewresolver, ordered {

        // 视图解析器的遍历顺序
	private integer order;

	@override
	public int getorder() {
		return order;
	}

        // 设置视图解析器的遍历顺序
	public void setorder(integer order) {
		this.order = order;
	}

	@override
	public view resolveviewname(string viewname, locale locale) throws exception {
		
		// 进行视图解析器的业务逻辑,返回视图对象则进行渲染,若返回 null 则继续遍历下一个视图解析器
		if (viewname.startswith("myview:")) {
			return new myview();
		}
		
		return null;
	}

}

3、在配置文件中将自定义的视图解析器注入ioc容器中:

	<bean class="com.pudding.view.myviewresolver">
                // order的值越小优先级越高,internalresourceviewresolver 的 order 值为 integer 的最大值。
		<property name="order" value="1"></property>
	</bean>