之前使用markdown在csdn上写博客虽然方便,但是存在一个我认为是缺陷而且感觉致命的非常不人性化的东西,不能直接贴图,要先保存下来qq截屏的图片,然后再上传进来,完全没有之前的ctrl + v简单!而且代码片段也没这边的好看,综合两点,我还是放弃了在这边使用markdown写博客的方式!
一、为什么要自定义视图
SpringMVC要整合excel等视图必须通过自定义视图来完成的
二、如何使用自定义视图
1.我们通过继承或实现来构建自定义视图,这里我们先创建一个实现
org.springframework.web.servlet.View
的测试类 DIYView:
package cn.jxufe.view;
@Component(value = "DIYView")
public class DIYView implements View {
@Override
public String getContentType() {
return "text/html";
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
response.getWriter().write("hello DIYView " + new Date());
}
}
为什么要加个@Component,下面讲到。
2. 创建了视图,我们要配置一个beanNameViewResolver来通过视图名称解析这个视图!
<!--配置能够根据类名来解析视图的解析器BeanNameViewResolver-->
<bean name="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="100"> </property>
</bean>
这个视图解析器是如何通过视图类名来解析视图的呢?
按住ctrl点击BeanNameViewResolver查看源码:
context.getBean(viewName, view.class),可以看出这个视图类对象是spring在系统在服务器初始化时放进context域中的。是运用spring的功能,所以前面我们要在试图类那里加上@Component,这样spring才会创建在context中的视图类对象!
3.在index.jsp中加上访问这个自定义视图的超链接已经在控制器上加上映射方法:
<a href="/testDIYView">测试自定义视图</a>
@RequestMapping(value = "/testDIYView")
public String testDIYView() {
return "DIYView";
}
运行后点击这个超链接,运行效果如图:
三、视图解析器中order属性
在一个SpringMVC程序中,可能存在多个视图解析器,那么一个逻辑视图如何决定先由哪个来解析呢,这就需要order来决定视图解析器的先后顺序,order越小优先级越高。在这边我们将此解析器设置成了100,那internalResourceViewResolver的order是多少呢?
ctrl 点击internalResourceViewResolver
ctrl 点击UrlBasedViewResolver:
可以看到internalResourceViewResolver的order是Integer.MAX_VALUE,所以这个解析器是肯定是最后解析的!
四、其他类型视图
连按三次shift搜索:
我们只要实现这个类中的
这个方法即可创建excle视图!