J'ai SortedMap dans Servlet pour renseigner les valeurs déroulantes dans JSP et j'ai le code suivant
SortedMap<String, String> dept = findDepartment();
request.setAttribute("dept ", dept);
et en 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 l'insertion et la mise à jour. Lorsque je modifie la page, comment puis-je définir la valeur sélectionnée de manière à ce que la valeur sélectionnée provienne de la base de données.
En HTML, l'option sélectionnée est représentée par la présence de l'attribut selected
sur le <option>
élément comme ceci:
<option ... selected>...</option>
Ou si vous êtes strict HTML/XHTML:
<option ... selected="selected">...</option>
Ainsi, il suffit de laisser JSP/EL l’imprimer de manière conditionnelle. Pourvu que vous ayez préparé le département sélectionné comme suit:
request.setAttribute("selectedDept", selectedDept);
alors cela devrait 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>
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>>
Si cela ne vous dérange pas d'utiliser jQuery, 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 votre Servlet, ajoutez 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 définir
request.setAttribute("selectedDept", selectedDept);
vous pouvez réutiliser les informations de JSTL, faites 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>
Peut-être que je ne comprends pas tout à fait la réponse acceptée, alors cela ne m'a pas fonctionné.
Ce que j'ai fait était simplement de vérifier si la variable est nulle, l'assigner à une valeur connue de ma base de données. Ce qui semble être similaire à la réponse acceptée, dans laquelle vous déclarez d’abord une valeur connue et définissez-la sur sélectionnée.
<select name="department">
<c:forEach var="item" items="${dept}">
<option value="${item.key}">${item.value}</option>
</c:forEach>
</select>
car aucune des options n'est sélectionnée, donc item = null
<%
if(item == null){
item = "selectedDept"; //known value from your database
}
%>
Ainsi, si l'utilisateur sélectionne une autre option, ma clause IF ne l'attrapera pas et n'attribuera à la valeur fixe déclarée au début. Mon concept pourrait être faux ici mais ça marche pour moi
J'ai essayé la réponse acceptée, cela n'a pas fonctionné.
Cependant, le moyen 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>
Prendre plaisir!!
Vous pouvez en essayer un encore plus simple:
<option value="1" ${item.quantity == 1 ? "selected" : ""}>1</option>