Spring MVC 視圖鏈

2018-07-26 14:11 更新

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永遠都會 返回一個視圖。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號