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.
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:
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 );
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>
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>>
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!!
vous pouvez essayer encore plus simple:
<option value="1" ${item.quantity == 1 ? "selected" : ""}>1</option>
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