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