W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Spring支持同時使用多個視圖解析器。因此,你可以配置一個解析器鏈,并做更多的事比如,在特定條件下覆寫一個視圖等。你可以通過把多個視圖解析器設(shè)置到應(yīng)用上下文(application context)中的方式來串聯(lián)它們。如果需要指定它們的次序,那么設(shè)置order
屬性即可。請記住,order屬性的值越大,該視圖解析器在鏈中的位置就越靠后。
在下面的代碼例子中,視圖解析器鏈中包含了兩個解析器:一個是InternalResourceViewResolver
,它總是自動被放置在解析器鏈的最后;另一個是XmlViewResolver
,它用來指定Excel視圖。InternalResourceViewResolver
不支持Excel視圖。
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="excelViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="order" value="1"/>
<property name="location" value="/WEB-INF/views.xml"/>
</bean>
<!-- in views.xml -->
<beans>
<bean name="report" class="org.springframework.example.ReportExcelView"/>
</beans>
如果一個視圖解析器不能返回一個視圖,那么Spring會繼續(xù)檢查上下文中其他的視圖解析器。此時如果存在其他的解析器,Spring會繼續(xù)調(diào)用它們,直到產(chǎn)生一個視圖返回為止。如果最后所有視圖解析器都不能返回一個視圖,Spring就拋出一個ServletException
。
視圖解析器的接口清楚聲明了,一個視圖解析器是可以返回null值的,這表示不能找到任何合適的視圖。并非所有的視圖解析器都這么做,但是也存在不得不如此的場景,即解析器確實無法檢測對應(yīng)的視圖是否存在。比如,InternalResourceViewResolver
在內(nèi)部使用了RequestDispatcher
,并且進入分派過程是檢測一個JSP視圖是否存在的唯一方法,但這個過程僅可能發(fā)生唯一一次。同樣的VelocityViewResolver
和部分其他的視圖解析器也存在這樣的情況。具體的請查閱某個特定的視圖解析器的Java文檔,看它是否會report不存在的視圖。因此,如果不把InternalResourceViewResolver
放置在解析器鏈的最后,將可能導(dǎo)致解析器鏈無法完全執(zhí)行,因為InternalResourceViewResolver
永遠都會 返回一個視圖。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: