webentwicklung-frage-antwort-db.com.de

Zeigt eine Liste von Werten in JSP mit Spring an

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?

4
Stepan Mocanu

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

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. 

2
Sergii Bishyr

Ä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>
0
Barath