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の例]