2つのビューリゾルバーを使用しようとしました:
_<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.evgeni.dfr.controller" />
<context:annotation-config />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="cache" value="false" />
<property name="viewClass" value="com.evgeni.drf.faces.FacesView" />
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".xhtml" />
<property name="order" value="1" />
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
<property name="order" value="0" />
</bean>
</beans>
_
アプリケーションは常に、順序が最も低いもののみを使用し、他は使用しません。現在の場合、コントローラーが「someView」を返すと、「pages/someView.xhtml」があっても、アプリはThe requested resource (/MyProject/WEB-INF/views/someView.jsp) is not available.
で応答します。
Springバージョン-3.2.3
編集:コントローラーに2つのメソッドがあり、methodAが「viewA」を返し、methodBが「viewB」を返す場合。そして、「views」フォルダにviewA.jspがあり、「pages」にviewB.xhtmlがあります。
ケース1:UrlBasedViewResolver-> order = 1、InternalResourceViewResolver-> order = 2
methodA-> The requested resource (/MyProject/WEB-INF/pages/viewA.xhtml) is not available.
;
_methodB -> OK
_
ケース2:UrlBasedViewResolver-> order = 2、InternalResourceViewResolver-> order = 1
methodA-> OK;
_methodB -> `The requested resource (/MyProject/WEB-INF/views/viewB.jsp) is not available.`;
_
注文の優先順位を誤解されたと思います。最上位のViewResolver
は、チェーンの最後のリゾルバーです。 InternalResourceViewResolver
に0
の順序を指定したため、これがチェーンの最初のリゾルバーになり、InternalResourceViewResolver
は返されるビュー名に関係なくビューを解決します。したがって、複数のリゾルバーが必要な場合は、InternalResourceViewResolver
が最上位のリゾルバーである必要があります。
InternalResourceViewResolver
注文値を2
に変更します。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.evgeni.dfr.controller" />
<context:annotation-config />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="cache" value="false" />
<property name="viewClass" value="com.evgeni.drf.faces.FacesView" />
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".xhtml" />
<property name="order" value="1" />
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
<property name="order" value="2" />
</bean>
</beans>
編集:
Javadocを確認したところ、InternalResourceViewResolver
はUrlBasedViewResolver
(InternalResourceViewResolverはUrlBasedViewResolverを拡張している)であるため、これら2つのリゾルバーをチェーンできないようです。両方のリゾルバは常に戻り値と一致します。これを行うには、何かカスタムが必要になると思います。
InternalResourceViewResolverの順序を0から1に変更します。InternalResourceViewResolverの順序は最大(優先度が低い)である必要があります。