2013-08-13 32 views
6

Tôi cố gắng để sử dụng 2 điểm phân giải:Spring MVC với nhiều quan điểm phân giải

<?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> 

Ứng dụng này luôn luôn chỉ sử dụng một trong những trình tự thấp nhất và không phải là khác. Trong trường hợp hiện tại nếu bộ điều khiển của tôi trả về "someView", ứng dụng sẽ phản hồi với The requested resource (/MyProject/WEB-INF/views/someView.jsp) is not available. ngay cả khi có "trang/someView.xhtml".

phiên bản mùa xuân - 3.2.3

Edit: Nếu tôi có 2 phương pháp trong điều khiển và methodA trả "viewA" và methodB trả "viewB". Và chúng tôi có viewA.jsp trong thư mục 'views' và viewB.xhtml trong 'pages'.

Trường hợp1: UrlBasedViewResolver -> trật tự = 1, InternalResourceViewResolver -> trật tự = 2

methodA ->The requested resource (/MyProject/WEB-INF/pages/viewA.xhtml) is not available.;

methodB -> OK 

Trường hợp2: UrlBasedViewResolver -> trật tự = 2, InternalResourceViewResolver -> trật tự = 1

methodA -> OK;

methodB -> `The requested resource (/MyProject/WEB-INF/views/viewB.jsp) is not available.`; 

Trả lời

11

Tôi nghĩ rằng bạn hiểu lầm thứ tự ưu tiên. Các ViewResolver với thứ tự cao nhất là giải quyết cuối cùng trong chuỗi. Vì bạn đã đưa ra InternalResourceViewResolver một đơn đặt hàng là 0, nó sẽ là người giải quyết đầu tiên trong chuỗi và InternalResourceViewResolver sẽ giải quyết chế độ xem bất kỳ tên chế độ xem nào được trả lại. Vì vậy, nếu bạn muốn nhiều trình phân giải, thì InternalResourceViewResolver phải là trình phân giải có thứ tự cao nhất.

Thay đổi giá trị 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> 

EDIT:

Sau khi kiểm tra các javadoc, có vẻ như hai phân giải những không thể bị xiềng xích vì InternalResourceViewResolver là một UrlBasedViewResolver (InternalResourceViewResolver mở rộng UrlBasedViewResolver). Cả hai trình phân giải đều khớp với giá trị trả lại. Tôi nghĩ rằng bạn sẽ cần một cái gì đó tùy chỉnh để có thể làm điều này.

+0

Tôi đã cập nhật câu hỏi của mình, hy vọng nó rõ ràng hơn bây giờ. –

+0

Kiểm tra chỉnh sửa của tôi. Trường hợp sử dụng của bạn là gì. Tại sao bạn sử dụng hai UrlBasedViewResolver đó. –

1

để chage trong InternalResourceViewResolver từ 0 đến 1. InternalResourceViewResolver phải có thứ tự lớn nhất (ưu tiên thấp hơn)

+0

Vì tôi đã giải thích chỉ trình phân giải chế độ xem với thứ tự thấp hơn khả dụng. Nếu tôi làm điều đó, ứng dụng sẽ luôn tìm kiếm xem trong 'trang' với hậu tố = xhtml và sẽ ném một lỗi nếu không tìm thấy ở đó ... –

Các vấn đề liên quan