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?
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>
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`.
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>