问题
在Spring MVC应用程序中,通常,您可能很少应用视图解析器策略来解析视图名称。 例如,将三个视图解析器组合在一起: InternalResourceViewResolver , ResourceBundleViewResolver和XmlViewResolver 。
<beans ...>
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location">
<value>/WEB-INF/spring-views.xml</value>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="spring-views" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
但是,如果返回了视图名称,将使用哪种视图解析器策略?
解
如果应用了多个视图解析器策略,则必须通过“ order ”属性声明优先级,其中较低的顺序值具有较高的优先级 ,例如:
<beans ...>
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location">
<value>/WEB-INF/spring-views.xml</value>
</property>
<property name="order" value="0" />
</bean>
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="spring-views" />
<property name="order" value="1" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
<property name="order" value="2" />
</bean>
</beans>
现在,如果返回了视图名称,则视图解析策略将按以下顺序工作:
XmlViewResolver --> ResourceBundleViewResolver --> InternalResourceViewResolver
注意
InternalResourceViewResolver必须始终分配最低优先级 (最大订单号),因为无论返回什么视图名称,它都会解析视图。 这导致其他视图解析器如果优先级较低,则没有机会解析视图。
下载源代码
下载它– SpringMVC-ViewResolver-Priority-Example.zip (7KB)
参考文献
- Spring MVC InternalResourceViewResolver示例
- Spring MVC XmlViewResolver示例
- Spring MVC ResourceBundleViewResolver示例
标签: 春天MVC