2014-01-05 38 views
0

一個按預期工作,但我想有兩個視圖解析器,這可能嗎?Spring MVC:幾個ViewResolvers

<bean id="App_viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="order" value="1"/> 
    <property name="prefix" value="/WEB-INF/views/App/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

<bean id="OtherApp_viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="order" value="2"/> 
    <property name="prefix" value="/WEB-INF/views/OtherApp/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

?? ??

我想呈現一個視圖,通過調用

new ModelAndView("start/start"); 

如果在第一個視圖解析器存在,然後渲染,否則嘗試下一個。

InternalResourceViewResolver顯然永遠不會像其他地方聲明的那樣返回false,但是其他JSP視圖解析器可以使用哪種方式呢?

擴展資源視圖解析器?

+0

您可以實現自己的是用'#的ServletContext的getResource()'定位jsp和返回false,如果你回來'null'。 –

+0

@SotiriosDelimanolis是的,我找到了類似的解決方案,只是它擴展了XltViewResolver,我不確定它是否以相同的方式工作。 http://stackoverflow.com/a/19492983/961018 方法的getURL不InternalResourceView提供... 我不確定在InternalResourceView – momomo

+0

覆蓋什麼方法一定是buildView吧? – momomo

回答

0

在這裏,你走了,這裏就是答案:

import org.springframework.web.servlet.view.InternalResourceView; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 

import java.util.Locale; 

public class ViewResolver extends InternalResourceViewResolver { 

    protected Class<?> requiredViewClass() { 
     return View.class; 
    } 

    public static class View extends InternalResourceView { 
     public boolean checkResource(Locale locale) throws Exception { 
      if (getServletContext().getResource(getUrl()) != null) { 
       return true; 
      } 

      return false; 
     } 
    } 
} 


<bean id="App_viewResolver" class="package.ViewResolver"> 
    <property name="order" value="1"/> 
    <property name="prefix" value="/views/App"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

<bean id="OtherApp_viewResolver" class="package.ViewResolver"> 
    <property name="order" value="2"/> 
    <property name="prefix" value="/WEB-INF/OtherApp"/> 
    <property name="suffix" value=".jsp"/> 
</bean>