spring配置多視圖解析器


最近做一個小項目(移動端),自己搭了個簡單的SSM框架(spring + spring MVC + Mybitis),展示層本來選用的是jsp,各方便都已經搭建好,結果發現有些頁面需要用到H5的一些功能,所以展示層需要用到Html,而自己又比較熟悉jsp,所以決定使用多視圖解析器。本篇先來介紹框架內配置多視圖解析器的方式:

  

在spring-mvc.xml中配置:

網上看的大部分都是采用默認的InternalResourceViewResolver解析器,如下:

 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 這里的配置我的理解是自動給后面action的方法return的字符串加上前綴和后綴,變成一個 可用的url地址 -->
        <property name="prefix" value="/WEB-INF/view/jsp/" />
        <property name="suffix" value=".jsp" />
        <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/> <!-- 不能用jstl的那個 -->
        <property name="contentType" value="text/html;charset=UTF-8"/>
         <property name="order" value="0"></property>
    </bean>

  
並使用order屬性來決定解析器的優先級(數值越小,優先級越高),所以打算分別寫一個這樣的jsp和html解析器,分別給予0和1的優先級,在配置html的視圖解析器的時候,也碰到了小問題(和jsp的有些不同,可以百度,這里不再詳說)。結果發現這兩個解析器,一直只能識別優先級高的那個,並不能實現按優先級識別,結果查找了一番,最后使用了下面的方法解決(兩種不同類型的解析器)

 <!-- html視圖解析器 必須先配置freemarkerConfig,注意html是沒有prefix前綴屬性的-->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
        <property name="templateLoaderPath">  
            <value>/WEB-INF/view/html</value>  
        </property>  
    </bean>  
     <bean id="htmlviewResolver"  
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
        <property name="suffix" value=".html" /> 
        <property name="order" value="0"></property> 
        <property name="contentType" value="text/html;charset=UTF-8"></property>         
    </bean>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 這里的配置我的理解是自動給后面action的方法return的字符串加上前綴和后綴,變成一個 可用的url地址 -->
        <property name="prefix" value="/WEB-INF/view/jsp/" />
        <property name="suffix" value=".jsp" />
        <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/> <!-- 不能用jstl的那個 -->
        <property name="contentType" value="text/html;charset=UTF-8"/>
         <property name="order" value="0"></property>
    </bean>

  

 
上面優先級都寫的0,經實驗發現跳轉jsp或者html都好使了。改為0和1就有問題,等項目解決完了再來研究吧...
 
后記:在另一個項目中也用到了這種方法,我把html的解析器代碼直接copy過去,發現不起作用,后來查閱資料才知道配置不同類型視圖解析器的時候,InternalResourceViewResolver必須放在最后
web.xml正常配置
<!-- Spring MVC 核心控制器 DispatcherServlet 配置 -->
	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

要加上freemarker jar包,不然會報錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM