使用JSTL的JSP下拉列表的选定值

jmo0nnb3  于 2022-12-07  发布在  其他
关注(0)|答案(9)|浏览(257)

我在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页面进行插入和更新。当我编辑页面时,我如何将所选值设置为下拉列表,其中所选值将来自数据库。

wgx48brx

wgx48brx1#

在HTML中,选定的选项由<option>元素上的selected属性表示,如下所示:

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

另请参阅:

uqzxnwby

uqzxnwby2#

我试了一下桑迪普·库马尔的最后一个答案,我发现更简单:

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

r7knjye23#

如果您不介意使用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 );
7lrncoxx

7lrncoxx4#

我认为上面的例子是正确的。但是你不需要设置

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

r6l8ljro5#

我试了一下公认的答案,它没有工作。
然而,简单的方法是这样做的:-

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

好好享受吧!

lrpiutwd

lrpiutwd6#

您可以尝试一个更简单的方法:

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

mitkmikd7#

也许我并不完全理解这个公认的答案,所以它对我不起作用。
我所做的只是检查变量是否为空,并将其赋给数据库中的一个已知值。

<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子句将不会捕获它并将其赋值给在开始时声明的固定值。

fwzugrvs

fwzugrvs8#

下面是使用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>
bkhjykvo

bkhjykvo9#

这些答案都不适用于strict XHTML。我使用的是Spring 4Tiles,所有当前的答案都生成错误。
经过多次试验和错误,我终于得到了它的工作,我能够放弃我的javascript黑客干预后,页面加载:

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

相关问题