Valeur sélectionnée pour JSP drop down en utilisant JSTL

j'ai SortedMap dans Servlet pour remplir les valeurs de chute dans JSP et j'ai le code suivant

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

et dans JSP

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

j'utilise une page JSP pour insérer et mettre à jour. Quand je suis en train d'éditer la page Comment puis-je définir la valeur sélectionnée pour la laisser tomber là où la valeur sélectionnée viendra de la base de données.

24
demandé sur Majid 2013-03-27 15:08:04

7 réponses

en HTML, l'option sélectionnée est représentée par la présence de l'attribut selected sur l'élément <option> comme so:

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

ou si vous êtes HTML/XHTML strict:

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

ainsi, vous avez juste à laisser JSP/EL l'imprimer conditionnellement. À condition que vous ayez préparé le ministère choisi comme suit:

request.setAttribute("selectedDept", selectedDept);

, alors il doit faire:

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

voir aussi:

38
répondu BalusC 2017-05-23 12:25:40

si l'utilisation de jQuery ne vous dérange pas, vous pouvez utiliser le code ci-dessous:

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

dans le votre Servlet ajouter ce qui suit:

        request.setAttribute("selectedDepartment", YOUR_SELECTED_DEPARTMENT );
2
répondu Uri Lukach 2013-03-27 11:17:51

je pense que les exemples ci-dessus sont corrects. mais vous n'avez pas vraiment besoin de mettre

request.setAttribute("selectedDept", selectedDept);

vous pouvez réutiliser cette information de JSTL, juste faire quelque chose comme ça..

<!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
répondu Sendi_t 2013-09-16 21:51:35

j'ai essayé la dernière réponse de Sandeep Kumar, et j'ai trouvé beaucoup plus simple:

<option value="1" <c:if test="${item.key == 1}"> selected </c:if>>
2
répondu Muchtarpr 2017-02-27 06:14:42

j'ai essayé la réponse acceptée, elle n'a pas fonctionné.

cependant la manière simple de le faire est ci-dessous: -

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

Profitez-en!!

1
répondu Sandeep Kumar 2015-01-12 09:39:26

vous pouvez essayer encore plus simple:

<option value="1" ${item.quantity == 1 ? "selected" : ""}>1</option>
1
répondu zeirna 2017-06-15 13:46:17

peut-être que je ne comprends pas complètement la réponse acceptée, donc ça n'a pas marché pour moi.

ce que j'ai fait était simplement de vérifier si la variable est nulle, assignez-la à une valeur connue de ma base de données. Ce qui semble être similaire à la réponse acceptée par laquelle vous déclarez d'abord une valeur connue et la mettez à sélectionné

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

parce qu'aucune des options n'est sélectionnée, donc item = nul

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

de cette façon si l'utilisateur sélectionne alors une autre option, Mon si clause ne l'attrapera pas et assignera à la valeur fixe qui a été déclarée au début. Mon concept pourrait être erroné ici, mais il fonctionne pour moi

1
répondu sicnarfmis 2017-07-13 08:10:49