有时候我们想自定义一个视图,怎么做呢?

spring mvc怎么知道我们访问的是哪一个视图类?

一、实现方法

(1)新建一个视图类

新建了一个包view,然后新建了一个视图类testview.java,同时需要继承org.springframework.web.servlet.View。

getContentType()返回的是本次返回的页面编码格式,这里就返回了text/html。

render()渲染了一个视图,这个方法下面就是你自定义的视图,这里继承了servlet的方法,通过HttpServletResponse返回了一个视图的内容。

(2)千万要记住,把你刚才新建的视图类放进spring mvc的ioc容器中

这是时间的教训,浪费了我10分钟。

  1. 在视图类加上@Component注解,表示需要加入ioc容器中。
  2. 然后在视图解析器的配置文件配自动扫描:<context:component-scan base-package=”view”></context:component-scan>

把刚才的视图类加进ioc容器中,才能被spring mvc找到,并且映射出来。如果spring mvc找不到这个视图类,那就报404了。

(3)自定义视图需要再配一个视图解析器BeanNameViewResolver,不能用原来的

具体就是这个类:

org.springframework.web.servlet.view.InternalResourceViewResolver

同为视图解析器,需要区分先后,决定我们的链接被解析到哪个视图,所以我们要配优先度。

这里就是<property name=”order” value=”100″></property>配了100。

spring mvc视图解析器默认的优先度是最低的,是integer的最大值,优先度数字越小,优先程度越高。

controller通过@RequestMapping传过来return,会先去找这个BeanNameViewResolver的视图解析器,看看ioc容器里有没有与请求相符的视图类(顾名思义,通过名字来找Bean)。

如果有,就返回相应的视图类,没有,就去默认的视图解析器找视图,如果还没有,就报错404了。

(4)写出controller

注意这个return的值要和视图类名字一样哦,而且需要以小写开头。

(5)测试结果

这样就可以找到自定义的这个testview视图了。

1

二、总结

记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注