Spring MVCで複数のリゾルバの優先度を設定する
問題
Spring MVCアプリケーションでは、ビュー名を解決するためにいくつかのビューリゾルバ戦略を適用することがよくあります。たとえば、3つのビューリゾルバを組み合わせます。
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
ソースコードをダウンロードする
ダウンロードする –
SpringMVC-ViewResolver-Priority-Example.zip
(7KB)
参考文献
-
リンク://spring-mvc/spring-mvc-internalresourceviewresolver-example/[Spring
MVC InternalResourceViewResolverの例]。リンク://spring-mvc/spring-mvc-xmlviewresolver-example/[Spring MVC
XmlViewResolverの例]。リンク://spring-mvc/spring-mvc-resourcebundleviewresolver-example/[Spring
MVC ResourceBundleViewResolverの例]