" />
Вопрос:

Выбранное значение для раскрывающегося списка JSP с использованием JSTL

jsp drop-down-menu jstl retain

139444 просмотра

7 ответа

8540 Репутация автора

У меня есть 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 для вставки и обновления. Когда я редактирую страницу, как я могу установить выбранное значение в раскрывающемся списке, где выбранное значение поступит из базы данных.

Автор: Jåcob Источник Размещён: 27.03.2013 11:08

Ответы (7)


41 плюса

897005 Репутация автора

Решение

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

Смотрите также:

Автор: BalusC Размещён: 27.03.2013 11:12

2 плюса

750 Репутация автора

Если вы не возражаете против использования 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 );
Автор: Uri Lukach Размещён: 27.03.2013 11:17

2 плюса

477 Репутация автора

Я думаю, что приведенные выше примеры верны. но вам не нужно устанавливать

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>
Автор: Sendi_t Размещён: 16.09.2013 09:51

1 плюс

21 Репутация автора

Я попробовал принятый ответ, он не работал.

Однако простой способ сделать это ниже:

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

Наслаждаться!!

Автор: Sandeep Kumar Размещён: 12.01.2015 09:39

3 плюса

31 Репутация автора

я попробовал последний ответ от Сандипа Кумара и нашел способ более простым:

<option value="1" <c:if test="${item.key == 1}"> selected </c:if>>
Автор: Muchtarpr Размещён: 27.02.2017 06:14

1 плюс

11 Репутация автора

Вы можете попробовать еще более простое:

<option value="1" ${item.quantity == 1 ? "selected" : ""}>1</option>
Автор: zeirna Размещён: 15.06.2017 01:46

1 плюс

31 Репутация автора

Может быть, я не совсем понимаю принятый ответ, поэтому он не сработал для меня.

То, что я сделал, было просто проверить, является ли переменная нулевой, присвоить ей известное значение из моей базы данных. Что похоже на принятый ответ, при котором вы сначала объявляете известное значение и устанавливаете его как выбранное

<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 не будет перехватывать ее и присваивать фиксированное значение, которое было объявлено в начале. Моя концепция может быть неправильной, но она работает для меня

Автор: sicnarfmis Размещён: 13.07.2017 08:10
Вопросы из категории :
32x32