zoukankan      html  css  js  c++  java
  • SpringMVC中支持多视图解析

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/suo082407128/article/details/70173301

    在SpringMVC模式当中可以通过如下配置来支持多视图解析

        <!-- jsp jstl -->
        <bean id="JSPViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
            <property name="viewNames" value="*jsp" />
            <property name="contentType" value="text/html; charset=utf-8"/>  
            <property name="prefix" value="/" />
            <property name="suffix" value="" />
            <property name="order" value="1"></property>
        </bean>
    
        <bean id="FMViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
            <property name="viewNames" value="*html" />
            <property name="contentType" value="text/html; charset=utf-8"/>
            <property name="cache" value="true" />
            <property name="prefix" value="/" />
            <property name="suffix" value="" />
            <property name="order" value="0"></property>
        </bean>
    

    首先可以使用order属性进行设置 系统首先按解析器的order值进行查找 首先使用FreeMarkerViewResolver解析器调用canHandle方法,判断当前解析器对视图是否能够解析。如不能解析在依次调用。

    最近被问到过几次关于springmvc多视图解析器解析的问题;总结一下。

    假设我有两个jsp:

    1 WEB-INF/html/a.jsp  

    2 WEB-INF/report/b.jsp  

    且我配置了视图解析器:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="1">  
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  
        <property name="contentType" value="text/html"/>  
        <property name="prefix" value="/WEB-INF/html/"/>  
        <property name="suffix" value=".jsp"/>  
    </bean>  
    

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="2">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="contentType" value="text/html"/>
    <property name="prefix" value="/WEB-INF/report/"/>
    <property name="suffix" value=".jsp"/>
    </bean>

    然后呢,我分别返回视图名为a和b;为什么a能找到,而b的时候是404;我配置了两个视图解析器,第一个找不到的话,第二个能找到啊?遇到过这个问题的朋友基本上会有类似的问题;

    分析

    此处我们使用了InternalResourceViewResolver,其有一个buildView方法,该方法一定会创建一个View;所以呢View永远不为null(即使该jsp不存在);问题就是出在这;因为我们使用这个的时候默认是使用servlet forward转发的,此时并不知道该jsp是否存在。

    解决方案

    最简单的办法是使用其viewNames属性,来指定一个是否可以处理的规则

    <property name= "viewNames" value= "html*,report*" />

    如上两个的意思是对html或report开头的视图名进行处理,比如返回的视图名为html/a 那么会交给viewNames为html*的那个解析器处理;

  • 相关阅读:
    JqueryDataTable的使用(.Net平台)
    MvcPager使用的Demo(同步分页)
    第一篇随笔
    基于querybuilder的可根据现有数据表自动生成Restful API的dotnet中间件
    EF Core懒人小技巧之拒绝DbSet
    【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持
    基于EF Core的Code First模式的DotNetCore快速开发框架
    Service Fabric独立集群搭建
    Win10打补丁KB4022725出现0x80073712错误
    【懒人有道】在asp.net core中实现程序集注入
  • 原文地址:https://www.cnblogs.com/jpfss/p/9584516.html
Copyright © 2011-2022 走看看