Ich möchte meine Werteliste in meiner JSP-Ansicht anzeigen, kann dies jedoch nicht.
Hier ist meine Controller-Klasse, die nur zur Liste der ModelAndView
-Liste hinzugefügt wird und dann auf meine index.jsp
-Seite umleitet.
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>
Ich kann auf den Controller zugreifen, da jedes Mal, wenn ich auf "Zaměstnanci"
tippe, der System.out.println("Kontroler EmployeeController")
"Kontroler EmployeeController"
in das Tomcat-Protokoll gedruckt wird, die index.jsp
-Seite jedoch leer ist.
Kann mir jemand einen Rat geben?
Wenn Sie ModelAndView
return ModelAndView selbst und nicht map.getViewName()
ausfüllen, die nur den Namen des Namens ohne Daten zurückgeben, wie in docs angegeben:
public String getViewName () Gibt den Ansichtsnamen zurück, der vom DispatcherServlet über einen ViewResolver aufgelöst werden soll, oder null, wenn ein View - Objekt verwendet wird.
wie folgt:
@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;
}
Zweitens fehlt Ihnen das jstl-Tag <%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core"%>
auf Ihrer Indexseite. Der Variablenname, den Sie der Liste gegeben haben, lautet "Listen", also "Listen" durchlaufen und nicht "ListEmployee" wie folgt:
<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>
Stellen Sie außerdem sicher, dass Sie JSTL Abhängigkeit in Ihrem Klassenpfad haben:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
Fügen Sie einfach Model
zu Ihren Controller-Methodenparametern hinzu und fügen Sie diesem Modell dann Attribute hinzu.
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";
}
Eine weitere Möglichkeit, dies zu tun, ist, ModelAndView
anstelle von String
zurückzugeben.
@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;
}
Wählen Sie einfach den für Sie besseren Weg.
Ändern Sie auch listEmployee
in Ihrer Indexseite in lists
, da Sie in ModelAndView
ein Attribut als lists
nicht listEmployee` haben.
Ändern Sie den Namen des Schlüssels und versuchen Sie es: 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>