web-dev-qa-db-fra.com

Afficher la liste des valeurs sur JSP à l'aide de Spring

Je souhaite afficher ma liste de valeurs dans ma vue jsp, mais je ne suis pas en mesure de le faire. 

Voici ma classe de contrôleur ci-dessous, qui n’ajoute que List à la carte ModelAndView et qu’elle redirige vers ma page 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>

Je peux accéder au contrôleur, car chaque fois que je clique sur "Zaměstnanci", la System.out.println("Kontroler EmployeeController") imprime le "Kontroler EmployeeController" dans le journal Tomcat, mais la page index.jsp est vierge. 

S'il vous plaît, quelqu'un peut-il me donner un conseil?

4
Stepan Mocanu

Au fur et à mesure que vous remplissez ModelAndView renvoie ModelAndView lui-même et non map.getViewName() qui renvoie uniquement le nom du nom sans données, comme indiqué dans la documentation:

public String getViewName () Renvoie le nom de la vue à résoudre par le fichier DispatcherServlet via ViewResolver, ou null si nous utilisons un View objet.

comme suit:

@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;
}

Deuxièmement, il vous manque la balise jstl <%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core"%> sur votre page d'index et le nom de variable que vous avez donné à la liste est "listes". Vous devez donc parcourir "listes" plutôt que "listEmployee", comme suit:

<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>

Assurez-vous également que vous avez JSTL dependency dans votre chemin de classe:

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

Ajoutez simplement Model à vos paramètres de méthode de contrôleur, puis ajoutez un attribut à ce modèle.

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";
}

Une autre façon de faire est de retourner ModelAndView au lieu de 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;
}

Il suffit de choisir quel chemin vous convient le mieux.

Et changez également listEmployee dans votre page d'index en lists car dans la ModelAndView vous avez un attribut en tant que lists not listEmployee`. 

2
Sergii Bishyr

Changez le nom de la clé et essayez-le: 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>
0
Barath