funciones ejemplos jsp drop-down-menu jstl retain

ejemplos - Valor seleccionado para JSP desplegable utilizando JSTL



jstl java api (7)

Tengo SortedMap en Servlet para completar los valores desplegables en JSP y tengo el siguiente código

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

y en JSP

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

Estoy usando una página JSP para insertar y actualizar. Cuando estoy editando la página, ¿cómo puedo configurar el valor seleccionado para desplegarlo donde el valor seleccionado provendrá de la base de datos?


Creo que los ejemplos anteriores son correctos. pero realmente no necesitas configurar

request.setAttribute("selectedDept", selectedDept);

puedes reutilizar esa información de JSTL, solo haz algo como esto ...

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


En HTML, la opción seleccionada se representa mediante la presencia del atributo selected en el elemento <option> como sigue:

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

O si eres HTML / XHTML estricto:

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

Por lo tanto, solo tiene que dejar que JSP / EL lo imprima condicionalmente. Siempre que haya preparado el departamento seleccionado de la siguiente manera:

request.setAttribute("selectedDept", selectedDept);

entonces esto debería hacer:

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

Ver también:


Intenté la última respuesta de Sandeep Kumar, y encontré mucho más simple:

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


Intenté la respuesta aceptada, no funcionó.

Sin embargo, la forma más sencilla de hacerlo es a continuación:

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

¡¡Disfrutar!!


Puedes probar uno aún más simple:

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


Si no te importa usar jQuery puedes usar el siguiente código:

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

En su Servlet, agregue lo siguiente:

request.setAttribute("selectedDepartment", YOUR_SELECTED_DEPARTMENT );


Tal vez no entiendo completamente la respuesta aceptada, así que no funcionó para mí.

Lo que hice fue simplemente verificar si la variable es nula, asignarla a un valor conocido de mi base de datos. Lo cual parece ser similar a la respuesta aceptada según la cual primero declaras un valor conocido y lo configuras para seleccionar

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

porque ninguna de las opciones está seleccionada, así item = null

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

De esta forma, si el usuario selecciona otra opción, mi cláusula IF no la detectará y asignará al valor fijo que se declaró al inicio. Mi concepto podría estar mal aquí pero funciona para mí