我在Servlet中有SortedMap来填充JSP中的下拉值,我有以下代码
SortedMap<String, String> dept = findDepartment();
request.setAttribute("dept ", dept);
和JSP
<select name="department">
<c:forEach var="item" items="${dept}">
<option value="${item.key}">${item.value}</option>
</c:forEach>
</select>
我正在使用一个JSP页面进行插入和更新。当我编辑页面时,如何设置所选值以下拉所选值将来自数据库。
答案 0 :(得分:40)
在HTML中,所选选项由selected
元素上<option>
元素的存在表示,如下所示:
<option ... selected>...</option>
或者,如果您严格遵守HTML / XHTML:
<option ... selected="selected">...</option>
因此,您只需要让JSP / EL有条件地打印它。前提是您已按如下方式准备所选部门:
request.setAttribute("selectedDept", selectedDept);
然后这应该做:
<select name="department">
<c:forEach var="item" items="${dept}">
<option value="${item.key}" ${item.key == selectedDept ? 'selected="selected"' : ''}>${item.value}</option>
</c:forEach>
</select>
答案 1 :(得分:3)
我尝试了Sandeep Kumar的最后一个答案,我觉得更简单:
<option value="1" <c:if test="${item.key == 1}"> selected </c:if>>
答案 2 :(得分:2)
如果您不介意使用jQuery,可以使用以下代码:
<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>
在您的Servlet中添加以下内容:
request.setAttribute("selectedDepartment", YOUR_SELECTED_DEPARTMENT );
答案 3 :(得分:2)
我认为上面的例子是正确的。但你真的不需要设置
request.setAttribute("selectedDept", selectedDept);
你可以从JSTL重用那些信息,只需做这样的事情......
<!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>
答案 4 :(得分:1)
我尝试了接受的答案,但没有用。
然而,简单的方法如下: -
<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>
享受!!
答案 5 :(得分:1)
你可以尝试一个更简单的方法:
<option value="1" ${item.quantity == 1 ? "selected" : ""}>1</option>
答案 6 :(得分:1)
也许我不完全理解接受的答案,所以它对我没用。
我所做的只是检查变量是否为空,将其分配给我的数据库中的已知值。这似乎类似于您首先声明已知值并将其设置为选定
的已接受答案<select name="department">
<c:forEach var="item" items="${dept}">
<option value="${item.key}">${item.value}</option>
</c:forEach>
</select>
因为没有选择任何选项,因此 item = null
<%
if(item == null){
item = "selectedDept"; //known value from your database
}
%>
这样,如果用户然后选择另一个选项,我的 IF子句将不会捕获它并分配给在开始时声明的固定值。我的概念可能在这里错了,但它对我有用
答案 7 :(得分:0)
下面是使用jstl标签的简单下拉示例
<form:select path="cityFrom">
<form:option value="Ghaziabad" label="Ghaziabad"/>
<form:option value="Modinagar" label="Modinagar"/>
<form:option value="Meerut" label="Meerut"/>
<form:option value="Amristar" label="Amristar"/>
</form:select>