[SPRING] 다중 뷰 해석자가있는 Spring MVC
SPRING다중 뷰 해석자가있는 Spring MVC
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"를 반환하면 앱이 응답합니다. 요청한 리소스 (/MyProject/WEB-INF/views/someView.jsp)를 사용할 수 없습니다. "pages / someView.xhtml"이 있더라도.
봄 버전 - 3.2.3
편집하다: 컨트롤러에 method가 2 개 있고 methodA가 "viewA"를 반환하면 메서드는 "viewBAG"를 반환합니다. 'views'폴더에는 viewA.jsp가 있고 'pages'에는 view.html이 있습니다.
Case1 : UrlBasedViewResolver -> order = 1, InternalResourceViewResolver -> order = 2
methodA -> 요청한 리소스 (/MyProject/WEB-INF/pages/viewA.xhtml)를 사용할 수 없습니다.
methodB -> OK
Case2 : UrlBasedViewResolver -> order = 2, InternalResourceViewResolver -> order = 1
methodA -> OK;
methodB -> `The requested resource (/MyProject/WEB-INF/views/viewB.jsp) is not available.`;
해결법
-
==============================
1.주문 우선 순위를 잘못 이해했다고 생각합니다. 최고 순위의 ViewResolver가 체인의 마지막 결정자입니다. InternalResourceViewResolver에 0의 순서를 부여했기 때문에 체인의 첫 번째 확인자가되고 InternalResourceViewResolver는 반환 된 모든보기 이름을보기로 해결합니다. 따라서 여러 개의 확인자를 원하면 InternalResourceViewResolver가 가장 높은 순서의 확인자 여야합니다.
주문 우선 순위를 잘못 이해했다고 생각합니다. 최고 순위의 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를 확장)이므로이 두 해결자가 체인으로 연결될 수없는 것으로 보입니다. 두 resolver는 항상 반환 값과 일치합니다. 나는 당신이 이것을 할 수 있도록 뭔가 특별한 것을 필요로한다고 생각합니다.
-
==============================
2.InternalResourceViewResolver의 Chage 순서는 0부터 1까지입니다. InternalResourceViewResolver는 가장 큰 순서 (낮은 우선 순위)를 가져야합니다.
InternalResourceViewResolver의 Chage 순서는 0부터 1까지입니다. InternalResourceViewResolver는 가장 큰 순서 (낮은 우선 순위)를 가져야합니다.
from https://stackoverflow.com/questions/18215402/spring-mvc-with-multiple-view-resolvers by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] thymeleaf에서 변수 이름에 대한 값 설정하기 (0) | 2018.12.25 |
---|---|
[SPRING] Spring JMS와 Websphere MQ (0) | 2018.12.25 |
[SPRING] 여러 jpa : xml config의 저장소, Spring java config를 사용하여 @EnableJPARepositories를 구성하는 방법은 무엇입니까? (0) | 2018.12.25 |
[SPRING] JPA와 Hibernate에서의 LazyInitializationException (0) | 2018.12.25 |
[SPRING] Spring 유효성 검사, PropertyEditor가 특정 오류 메시지를 생성하는 방법 (0) | 2018.12.25 |