1. 程式人生 > >Spring MVC 多檢視解析器

Spring MVC 多檢視解析器

第一步:匯入jar freemarker-2.3.23.jar spring-context-support-4.0.4.RELEASE.jar

<dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
    <version>4.0.4.RELEASE</version>
  </dependency>

第二步:配置檔案配置

<!-- html檢視解析器 必須先配置freemarkerConfig,注意html是沒有prefix字首屬性的-->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!--模板路徑,相當於字首-->
        <property name="templateLoaderPath">
            <value>/WEB-INF/htmls/</value>
        </property>
    </bean>
    <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="contentType" value="text/html;charset=UTF-8"></property>
        <property name="cache" value="true"/>
        <!--字尾,沒有字首屬性-->
        <property name="suffix" value=".html" />
        <!--優先級別,越小級別越高-->
        <property name="order" value="0"/>
    </bean>


    <!--配置檢視解析器,不同包可以建多個解析器,用viewNames屬性區分:匹配檢視名以jpg開頭的。-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="contentType" value="application/xml"/>
        <property name="viewNames" value="htmls*"/>
        <!--字首-->
        <property name="prefix" value="/WEB-INF/"/>
        <!--字尾-->
        <property name="suffix" value=".jsp"/>
        <property name="order" value="1"/>
    </bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
        <property name="viewNames" value="jsp*"/>
        <!--字首-->
        <property name="prefix" value="/WEB-INF/"/>
        <!--字尾-->
        <property name="suffix" value=".jsp"/>
        <property name="order" value="2"/>
    </bean>

首先可以使用order屬性進行設定 系統首先按解析器的order值進行查詢 首先使用FreeMarkerViewResolver解析器呼叫canHandle方法,判斷當前解析器對檢視是否能夠解析。如不能解析在依次呼叫。

我這有兩個JSP檔案:因為不同包,所以就多配一個InternalResourceViewResolver解析器

1 WEB-INF/htmls/a.jsp  

2 WEB-INF/jsp/b.jsp

**注意:**要新增viewNames屬性,以分別匹配不同的包。因為InternalResourceViewResolver其有一個buildView方法,該方法一定會建立一個View;所以呢View永遠不為null(即使該jsp不存在);

<property name="viewNames" value="htmls*"/>

<property name="viewNames" value="jsp*"/>

如上兩個的意思是對htmls或jsp開頭的檢視名進行處理,比如返回的檢視名為htmls/a 那麼會交給viewNames為htmls*的那個解析器處理;