弹簧mvc中的多视图解析器不起作用

时间:2014-05-05 05:57:09

标签: spring spring-mvc url-routing

<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <property name="resourceLoaderPath" value="/WEB-INF/html/"/>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
    <property name="cache" value="true"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=".html"/>
    <property name="exposeSpringMacroHelpers" value="true"/>
    <property name="order" value="1" />
</bean>

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="cache" value="true"/>
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=".jsp"/>
    <property name="order" value="2" />
</bean>

我有所有的html页面,所以它可以正常使用viewResolver,但现在我添加了jsp,因此使用InternalResourceViewResolver创建了另一个bean。不知怎的,它似乎没有通过jsp视图解析器&amp;在尝试访问user.jsp

时提供异常SEVERE: ResourceManager : unable to find resource '/users.html' in any resource loader.

控制器代码

@RequestMapping("/layout")
public String getUserPage(ModelMap modelMap) {
    return "users";
}

2 个答案:

答案 0 :(得分:2)

我认为你应该添加前缀的值:

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="cache" value="true"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="2" />

答案 1 :(得分:1)

Spring Docs说:

  

视图解析器的合约指定视图解析器可以   返回null表示无法找到视图。不是所有观点   然而,解析器会这样做,因为在某些情况下,解析器只是   无法检测视图是否存在。例如,   InternalResourceViewResolver在内部使用RequestDispatcher,   并且调度是确定JSP是否存在的唯一方法,但是   此操作只能执行一次。同样适用于   VelocityViewResolver和其他一些人。检查Javadoc以查看视图   解析器是否报告不存在的视图。因此,推杆   在链中的InternalResourceViewResolver以外的地方   最后,导致链没有被完全检查,因为   InternalResourceViewResolver将始终返回视图!

让你的代码工作;请将 jspViewResolver 的顺序从2改为1,如下所示,

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="cache" value="true"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value=""/>
<property name="suffix" value=".jsp"/>
<property name="order" value="1" />

作为order属性越高,视图解析器在链中定位的越晚。