2012-05-16 40 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页面的名称),但您的也没有错。