18.5.2链接视图解析器

Spring支持多个视图解析器。 因此,您可以链接解析器,并在某些情况下覆盖特定的视图。 您可以通过向应用程序上下文中添加多个解析器来链接视图解析器,并在必要时通过设置order属性来指定排序。 请记住,订单属性越高,视图解析器在链中的位置越晚。

在以下示例中,视图解析器链由两个解析器组成:一个InternalResourceViewResolver(始终自动定位为链中的最后一个解析器)以及一个用于指定Excel视图的XmlViewResolver。 Excel视图不受InternalResourceViewResolver支持。

<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会检查其他视图解析器的上下文。 如果存在额外的视图解析器,Spring将继续检查它们,直到视图解决。 如果没有视图解析器返回一个视图,Spring会抛出一个ServletException异常。

视图解析器的合约指定一个视图resolver_can_return为null以指示视图找不到。 然而并不是所有的视图解析器都这样做,因为在某些情况下,解析器根本无法检测视图是否存在。 例如,InternalResourceViewResolver在内部使用RequestDispatcher,调度是确定JSP是否存在的唯一方法,但此操作只能执行一次。 FreeMarkerViewResolver和其他的一样。 检查特定视图解析器的javadoc以查看是否报告不存在的视图。 因此,将一个InternalResourceViewResolver放在链中的最后一个结果链中没有被完全检查,因为InternalResourceViewResolverwill_always_return一个视图!

results matching ""

    No results matching ""