【问题标题】:multiple view resolver in spring mvc does not workspring mvc中的多视图解析器不起作用
【发布时间】:2014-05-05 05:57:09
【问题描述】:
<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 视图解析器并在尝试访问 user.jsp 时给出异常SEVERE: ResourceManager : unable to find resource '/users.html' in any resource loader.

控制器代码是

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

【问题讨论】:

  • 请分享您的控制器代码 sn-p。

标签: spring spring-mvc url-routing


【解决方案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="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="2" />

【讨论】:

    【解决方案2】:

    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 属性越高,视图解析器在链中的位置就越晚。

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 2020-11-12
      • 2013-08-12
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2022-11-16
      • 2017-12-08
      相关资源
      最近更新 更多