【问题标题】:mvc:view-controller causes PageNotFound in Spring Tiles2mvc:view-controller 导致 Spring Tiles2 中的 PageNotFound
【发布时间】:2011-09-07 19:48:30
【问题描述】:

我有一个基于 Spring 3.0.6 的 webapp,它在 Tomcat 7.0 上运行良好。

web.xml 定义调度程序如下:

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

调度程序以通常的方式定义视图解析器:

<bean id="tilesViewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass"
      value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>

<bean id="tilesConfigurer"
    class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  <property name="definitions">
    <list>
      <value>/WEB-INF/tiles-def.xml</value>
    </list>
  </property>
</bean>

我有一个用@RequestMapping("/home") 注释的控制器和一个在tiles-def.xml 中定义的"home" 视图。当我将浏览器指向/myapp/home.html 时,Tiles 页面就会打开。

如果我将 &lt;mvc:resources mapping="/resources/**" location="/resources/" /&gt;&lt;mvc:view-controller path="/" view-name="home.html"/&gt; 添加到调度程序 xml 文件中,将浏览器指向 /myapp/home.html 会导致 404。日志显示:

21:34:22,128  WARN PageNotFound:947 – No mapping found for HTTP request with URI [/myapp/home.html] in DispatcherServlet with name 'dispatcher'

我做错了什么?

非常感谢

【问题讨论】:

  • 你可以在 DispatcherServlet.doDispatch 中设置断点,看看发生了什么。 :)
  • 您好 Boris,我尝试调试,但调度程序 servlet 的内部工作非常难以理解。问题是我的 MVC 控制器中的方法是 void 并且没有返回任何字符串,因此框架尝试使用路径自动解析视图。我改变了这个明确地返回 Tiles2 视图名称,一切都重新开始了。我吸取了教训,永远不要让 Spring 猜测任何事情...... ;-)
  • 好的。请将您的结果作为答案发布并关闭问题))。

标签: spring model-view-controller dispatcher tiles2


【解决方案1】:

我的应用程序中的问题是由于自动视图名称解析。我在@Controller 中的注解方法返回了void,框架尝试使用请求路径猜测图块视图名称。

我修改了我的注释方法如下,返回一个String

@RequestMapping(value="/page", method = RequestMethod.GET)
public String showForm(HttpServletRequest request, Model model) {
    // TO BUSINESS LOGIC

    // return tiles view name as configured in 'tiles-def.xml'
    return "my_tiles_view_name";
}

进行此更改后,一切正常。

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    相关资源
    最近更新 更多