2011-09-07 55 views
0

我有一個基於Spring 3.0.6的webapp,可以在Tomcat 7.0上正常工作。mvc:視圖控制器在Spring Tiles中導致PageNotFound2

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")和在限定的"home"視圖tiles-def.xml。當我將瀏覽器指向/myapp/home.html時,Tiles頁面打開。

如果我添加<mvc:resources mapping="/resources/**" location="/resources/" /><mvc:view-controller path="/" view-name="home.html"/>我的調度員的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' 

我在做什麼錯?

非常感謝

+0

您可以在DispatcherServlet.doDispatch中設置斷點並查看發生了什麼。 :) –

+1

嗨鮑里斯,我試圖調試,但調度員servlet的內部工作是非常複雜的理解。問題是我的MVC控制器中的方法是'void',並且沒有返回任何字符串,所以框架試圖使用路徑自動解析視圖。我改變了這個明確返回的Tiles2視圖名稱,並且一切都重新工作。我吸取了教訓,從不讓春天猜到什麼...... ;-) – Ciaccia

+0

好的。請張貼您的結果作爲答案並關閉問題))。 –

回答

0

在我的應用程序的問題是由於自動視圖名稱解析。我在我的@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"; 
} 

隨着這一變化,一切工作正常。

相關問題