2012-05-16 38 views
2

我想從控制器返回一個簡單的字符串「HelloSpring」到jsp。控制器是ModelAndView對象不返回到jsp

package it.polito.ai.e4; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.portlet.ModelAndView; 

@Controller 
public class HelloSpringController 
{ 
@RequestMapping("/hello") 
public ModelAndView helloSpring(HttpServletRequest request, 
     HttpServletResponse response) 
{ 
    String message = "HelloSpring"; 
    return new ModelAndView("hello", "message", message); 
} 
} 

JSP是

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Hello page</title> 
</head> 
<body> 
    <%=(String)request.getAttribute("message")%> 
</body> 
</html> 

當我執行這個在Tomcat 7我得到頁的肉體 「空」 的字符串。我的web.xml是

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
version="3.0"> 
<display-name>ai4</display-name> 
<servlet> 
    <servlet-name>ai4</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>ai4</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 
+0

爲了使用'(String)request.getAttribute(「message」)'你必須先'request.setAttribute(「message」)''。 – Jonathan

+0

那麼我認爲你只需要返回你想要控制器去的視圖。在這種情況下,不是'返回新的ModelAndView(「hello」,「message」,message);''只使用'return「hello」'; – Jonathan

+0

謝謝,我認爲在Spring中屬性必須通過ModelAndView構造函數傳遞。 – gc5

回答

4

嘗試導入org.springframework.web.servlet.ModelAndView而不是org.springframework.web.portlet.ModelAndView。 :)

而且,薩米特德賽提到的,由於彈簧3,大多數人寫這樣的控制器方法:

@RequestMapping("/hello") 
public String helloSpring(Model m) 
{ 
    m.addAttribute("message", "HelloSpring"); 
    return "hello"; 
} 

這只是風格,你做了什麼工作了。希望有所幫助。

+0

好了,現在它的工作。謝謝 :) – gc5

0

您可能配置錯誤的視圖解析器。特別是,我會仔細檢查你的視圖解析器的「viewClass」屬性。張貼您的春天配置,以便我們可以檢查。

0

$ {message}應該爲你工作。另外,它看起來你正在使用Spring 3.x.因此,更好的方法是使用ModelMap對象,該對象允許您將多個模型對象傳遞給JSP(您的方法的返回類型helloSpring應該是String,在這種情況下,它將對應於JSP頁面的名稱),但您的也沒有錯。