Spring使用ModelAndView添加对象

Spring使用ModelAndView添加对象,spring,modelandview,Spring,Modelandview,我试图在jsp页面中显示使用addObject()加载并通过控制器返回的对象。我没有看到jsp中的对象。这是我的控制器: import java.util.ArrayList; import java.util.Arrays; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframe

我试图在jsp页面中显示使用addObject()加载并通过控制器返回的对象。我没有看到jsp中的对象。这是我的控制器:

import java.util.ArrayList;
import java.util.Arrays;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.apress.pss.terrormovies.model.Movie;
import com.apress.pss.terrormovies.service.MoviesService;

@Controller
@RequestMapping("/movies")
public class MovieController {

    @Autowired
    private MoviesService moviesService;

    ... Other Mapped mehtods not shown ...

    // Respond to http://localhost:8080/movies and require login
    // Get a list of movie objects in an ArrayList and return to view
    @RequestMapping(method = RequestMethod.GET, value="/")
    public ModelAndView getAllMovies() {
        ModelAndView mv = new ModelAndView("allMovies");

        // Debug
        for (Movie movie: moviesService.getAllMovies()) {
           System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " + movie.getName());
        }

        mv.addObject("movies", moviesService.getAllMovies());
        return mv;

    }

}   
这是实现moviesService.getAllMovies()的MoviesServiceImpl

当我到达URL/movies(在localhost上)时,系统会提示我登录。当我以管理员身份登录时,我应该会在MoviesServiceImpl中看到添加到电影地图中的两部电影。我可以在加载电影的静态块中看到调试。我可以在MovieController.getAllMovies()方法中看到调试程序访问的电影。我被正确地引导到allMovies.jsp页面,但唯一输出的是“Movies:”。如果我删除allMovies.jsp中for循环的检查,我将得到以下输出:Movies:${movie.name}。我看不到抛出的异常或其他错误,但我认为我没有正确使用ModelAndView.addObject()。我们将非常感谢您的帮助。先谢谢你


更新:如果我在jsp页面中添加以下语句:我将得到以下输出:“jsp:movie[标题:Die Hard;预算:20000000,标题:巴黎两天;预算:1000000]”,因此对象数组将进入jsp页面,我只是没有正确访问它,但没有看到错误。

您能用Model.addAttribute(名称,值)而不是ModelAndView.addObject(名称,值)检查吗? 我认为Model.addAttribute方法也会遇到同样的问题

请尝试添加以下内容

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>


对于那些可能有类似问题的人,答案是我的web.xml文件。这个例子来自于Pro Spring Security一书。作者以前面的例子为基础来说明概念。在本例中,作者没有提到从使用DTD而不是xml模式的早期版本更新web.xml文件。我必须将我的web.xml更改为:

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
...
</web-app>

...
致:


...
未对EL表达式进行评估。现在工作正常。

通过修改

<web-app> 

作为



我尝试使用Model.addAttributes,但遇到了相同的问题。我添加了当您删除检查时,如果您在jsp中看到
${movie.name}
,那么JSTL表达式似乎没有被计算。你能发布你的
web.xml
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
...
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
...
</web-app>
<web-app> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">