web-dev-qa-db-ja.com

JSTLを使用したJSPドロップダウンの選択値

JSPにドロップダウン値を設定するために、サーブレットにSortedMapがあり、次のコードがあります。

    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>

挿入と更新に1つのJSPページを使用しています。ページを編集しているときに、選択した値がデータベースから取得される場所をドロップダウンするように設定するにはどうすればよいですか。

24
Jåcob

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>

こちらもご覧ください:

41
BalusC

私はSandeep Kumarから最後の答えを試してみましたが、もっと簡単です:

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

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>

サーブレットに次を追加します。

        request.setAttribute("selectedDepartment", YOUR_SELECTED_DEPARTMENT );
2
Uri Lukach

上記の例は正しいと思います。しかし、あなたは本当に設定する必要はありません

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

受け入れられた答えが完全に理解されていないので、うまくいかなかったのかもしれません。

私がやったことは、変数がnullであるかどうかを単純にチェックし、データベースから既知の値に割り当てます。最初に既知の値を宣言し、選択済みに設定するという受け入れられた答えに似ているようです

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

このように、ユーザーが別のオプションを選択すると、my IF句はそれをキャッチせず、開始時に宣言された固定値に割り当てます。ここで私のコンセプトは間違っている可能性がありますが、それは私にとってはうまくいきます

1
sicnarfmis

私は受け入れられた答えを試しましたが、うまくいきませんでした。

しかし、それを行う簡単な方法は以下のとおりです。

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

楽しい!!

1
Sandeep Kumar

さらに簡単なものを試すことができます:

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