webentwicklung-frage-antwort-db.com.de

Ausgewählter Wert für JSP-Dropdown mithilfe von JSTL

Ich habe SortedMap in Servlet, um Dropdown-Werte in JSP aufzufüllen, und ich habe den folgenden Code

    SortedMap<String, String> dept = findDepartment();
    request.setAttribute("dept ", dept);

und in JSP

       <select name="department">
          <c:forEach var="item" items="${dept}">
            <option value="${item.key}">${item.value}</option>
          </c:forEach>
        </select>

Ich verwende eine JSP-Seite zum Einfügen und Aktualisieren. Wenn ich die Seite bearbeite, kann ich festlegen, dass der ausgewählte Wert aus der Datenbank stammt.

24
Jåcob

In HTML wird die ausgewählte Option durch das Vorhandensein des Attributs selected im Element <option> Wie folgt dargestellt:

<option ... selected>...</option>

Oder wenn Sie HTML/XHTML-streng sind:

<option ... selected="selected">...</option>

Sie müssen JSP/EL daher nur bedingt drucken lassen. Vorausgesetzt, Sie haben die ausgewählte Abteilung wie folgt vorbereitet:

request.setAttribute("selectedDept", selectedDept);

dann sollte dies tun:

<select name="department">
    <c:forEach var="item" items="${dept}">
        <option value="${item.key}" ${item.key == selectedDept ? 'selected="selected"' : ''}>${item.value}</option>
    </c:forEach>
</select>

Siehe auch:

41
BalusC

ich habe die letzte Antwort von Sandeep Kumar ausprobiert und fand es viel einfacher:

<option value="1" <c:if test="${item.key == 1}"> selected </c:if>>
3
Muchtarpr

Wenn es Ihnen nichts ausmacht, jQuery zu verwenden, können Sie den folgenden Code verwenden:

    <script>
     $(document).ready(function(){
           $("#department").val("${requestScope.selectedDepartment}").attr('selected', 'selected');
     });
     </script>


    <select id="department" name="department">
      <c:forEach var="item" items="${dept}">
        <option value="${item.key}">${item.value}</option>
      </c:forEach>
    </select>

Fügen Sie im Servlet Folgendes hinzu:

        request.setAttribute("selectedDepartment", YOUR_SELECTED_DEPARTMENT );
2
Uri Lukach

Ich denke, obige Beispiele sind richtig. Aber du musst es nicht unbedingt einstellen

request.setAttribute("selectedDept", selectedDept);

sie können diese Informationen von JSTL wiederverwenden, machen Sie einfach so etwas ..

<!DOCTYPE html>
<html lang="en">
<%@taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://Java.Sun.com/jsp/jstl/functions" %>
<head>
    <script src="../js/jquery-1.8.1.min.js"></script>
</head>
<body>
    <c:set var="authors" value="aaa,bbb,ccc,ddd,eee,fff,ggg" scope="application" />
    <c:out value="Before : ${param.Author}"/>
    <form action="TestSelect.action">
        <label>Author
            <select id="Author" name="Author">
                <c:forEach items="${fn:split(authors, ',')}" var="author">
                    <option value="${author}" ${author == param.Author ? 'selected' : ''}>${author}</option>
                </c:forEach>
            </select>
        </label>
        <button type="submit" value="submit" name="Submit"></button>
        <Br>
        <c:out value="After :   ${param.Author}"/>
    </form>
</body>
</html>
2
Sendi_t

Vielleicht verstehe ich die akzeptierte Antwort nicht ganz und es hat bei mir nicht funktioniert.

Ich habe lediglich überprüft, ob die Variable null ist, und sie einem bekannten Wert aus meiner Datenbank zugewiesen. Dies scheint der akzeptierten Antwort zu ähneln, bei der Sie zuerst einen bekannten Wert deklarieren und ihn auf "Ausgewählt" setzen

<select name="department">
    <c:forEach var="item" items="${dept}">
        <option value="${item.key}">${item.value}</option>
    </c:forEach>
</select>

da keine der Optionen ausgewählt ist, ist item = null

<%
    if(item == null){
        item = "selectedDept"; //known value from your database
    }
%>

Wenn der Benutzer dann eine andere Option auswählt, wird sie von meiner IF-Klausel nicht abgefangen und dem zu Beginn deklarierten festen Wert zugewiesen. Mein Konzept könnte hier falsch sein, aber es funktioniert für mich

1
sicnarfmis

Ich habe versucht, die akzeptierte Antwort, es hat nicht funktioniert.

Der einfache Weg dies zu tun ist jedoch wie folgt:

<option value="1" <c:if test="${item.quantity == 1}"> <c:out value= "selected=selected"/</c:if>>1</option>
<option value="2" <c:if test="${item.quantity == 2}"> <c:out value= "selected=selected"/</c:if>>2</option>
<option value="3" <c:if test="${item.quantity == 3}"> <c:out value= "selected=selected"/</c:if>>3</option>

Genießen!!

1
Sandeep Kumar

Sie können es noch einfacher versuchen:

<option value="1" ${item.quantity == 1 ? "selected" : ""}>1</option>
1
zeirna