springmvc学习笔记(15)——自定义视图

什么时候用到自定义视图

通常我们所用到的视图就是jsp等网页,有些时候,我们会根据我们的需求自定义视图。比如我们要提交一个表单,然后把表单的内容导出为Excel,这时候我们就可以定义一个导出Excel的视图。
springmvc给我们提供了一些接口,包括导出Excel的接口:AbstractExcelView
这里我就不细说怎么导出Excel(其实我暂时还不会,哈哈),只简单说说怎么自定义视图。
导出excel可以参考导出excel

如何自定义视图

1.new一个类,实现View接口

package com.zj.views;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;

@Component
public class HelloView implements View{

    /**
     * 视图类型
     */
    @Override
    public String getContentType() {
        return "text/html";
    }
    /**
     * 渲染视图
     */
    @Override
    public void render(Map<String, ?> map, HttpServletRequest reqeust,
            HttpServletResponse response) throws Exception {
        response.getWriter().write("hello");

    }
}

注意:我们定义的视图类要加上注解@Component,这样spring容器才会帮我们创建这个视图的实例。

2.在springmvc配置文件中加入以下配置

    <!-- 配置视图  BeanNameViewResolver 解析器: 使用视图的名字来解析视图 -->
    <!-- 通过 order 属性来定义视图解析器的优先级, order 值越小优先级越高 -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="100"></property>
    </bean>

上方配置中,有个property为order值得注意。值越小优先级越高。当我们在目标方法中return一个视图的时候,会先通过优先级高的视图解析器来解析,如果搞不定,再由优先级低的视图解析器去解析。
我们想要我们自定义的视图解析器起作用,就必须让这个视图解析器优先级比InternalResourceViewResolver这个视图解析器高,InternalResourceViewResolver的order默认是Integer.MAX_VALUE(如果我们没记错的话)

BeanNameViewResolver是一个视图解析器,大家应该还记得在配置springmvc项目时配置的一个视图解析器:

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

springmvc给我们提供了多个视图解析器,一般情况下我们配置InternalResourceViewResolver这个视图解析器,而本次,我们则使用BeanNameViewResolver,使用视图的名字来解析视图。

3.在控制层添加目标方法

    @RequestMapping("/testView")
    public String testView(){
        return "helloView";
    }

代码解析: 这里我们 return "helloView"; 视图解析器就会去找相应的视图。我们自定义的视图是HelloView,spring容器帮我们实例对象的时候,首字母会小写,即 HelloView helloView = new HelloView()

运行流程

  1. 用户访问/testView这个目标方法,该方法返回”helloView”这个视图
  2. BeanNameViewResolver视图解析器优先级比较高,解析helloView,并且解析成功。
  3. 自定义视图HelloView中的render方法被调用
  4. 用户得到视图(界面)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值