使用Spring显示JSP上的值列表

时间:2017-02-05 17:04:53

标签: java spring jsp spring-mvc modelandview

我想在我的jsp视图中显示我的值列表,但我无法做到这一点。

下面是我的控制器类,它只是将{List}添加到ModelAndView地图,而不是重定向到我的index.jsp页面。

EmployeeController

@Controller
public class EmployeeController {

@RequestMapping(value={"/employee"}, method = RequestMethod.GET)
public String listEmployee(){    
    System.out.println("Kontroler EmployeeController");
    LinkedList<String> list = getList();
    ModelAndView map = new ModelAndView("index");
    map.addObject("lists", list);

    return map.getViewName();
}

private LinkedList<String> getList(){
    LinkedList<String> list = new LinkedList<>();

    list.add("Item 1");
    list.add("Item 2");
    list.add("Item 3");

    return list;
}

}

的index.jsp

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Welcome to Spring Web MVC project</title>
</head>

<body>
    <h1>Index page</h1>
    <h1>${msg}</h1>
    <a href="/MavenHello/employee">Zaměstnanci</a>
</body>
    <c:if test="${not empty listEmployee}">

    <ul>
        <c:forEach var="listValue" items="${listEmployee}">
            <li>${listValue}</li>
        </c:forEach>
    </ul>

</c:if>

我可以访问控制器,因为每次点击"Zaměstnanci"时,System.out.println("Kontroler EmployeeController")都会将"Kontroler EmployeeController"打印到Tomcat日志中,但index.jsp页面为空。

拜托,有人可以给我一个建议吗?

3 个答案:

答案 0 :(得分:4)

当您填充ModelAndView时,返回ModelAndView本身,而不是map.getViewName(),它只返回名称的名称而不包含docs中所述的数据:

  

public String getViewName()返回要由其解析的视图名称   DispatcherServlet通过ViewResolver,如果我们使用View,则为null   对象

如下:

@RequestMapping(value = { "/employee" }, method = RequestMethod.GET)
public ModelAndView listEmployee() {
    System.out.println("Kontroler EmployeeController");
    LinkedList<String> list = getList();
    ModelAndView map = new ModelAndView("index");
    map.addObject("lists", list);

    return map;
}

其次,您在索引页面上缺少jstl标记<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>,并且您给列表的变量名称是&#34; list&#34;所以迭代&#34;列表&#34;而不是&#34; listEmployee&#34;,如下:

<html>
<head>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome to Spring Web MVC project</title>
</head>

<body>
    <h1>Index page</h1>
</body>

<c:if test="${not empty lists}">
    <c:forEach items="${lists}" var="lists">
       ${lists}
</c:forEach>
</c:if>

另外,请确保您的类路径中存在JSTL依赖项:

<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

答案 1 :(得分:2)

只需将Model添加到控制器方法参数中,然后将属性添加到此模型中。

RequestMapping(value={"/employee"}, method = RequestMethod.GET)
public String listEmployee(Model model){    
    System.out.println("Kontroler EmployeeController");
    LinkedList<String> list = getList();
    model.addAttribute("lists", list);

    return "index";
}

另一种方法是返回ModelAndView而不是String

@RequestMapping(value={"/employee"}, method = RequestMethod.GET)
public ModelAndView listEmployee(){    
    System.out.println("Kontroler EmployeeController");
    LinkedList<String> list = getList();
    ModelAndView map = new ModelAndView("index");
    map.addObject("lists", list);

    return map;
}

选择哪种方式更适合您。

并将您的索引页面中的listEmployee更改为lists,就像ModelAndView您的属性为lists而非listEmployee`一样。

答案 2 :(得分:0)

更改密钥名称并尝试:listEmployee --> lists as you are setting it as map.addObject("lists", list);

<ul>
    <c:forEach var="listValue" items="${lists}">
        <li>${listValue}</li>
    </c:forEach>
</ul>