Как получить список Java и построить раскрывающийся список на странице JSP - PullRequest
0 голосов
/ 06 июня 2011

У меня есть страница JSP. если пользователь вводит определенный текст, отправляется ajax-запрос, а список извлекается. Теперь я хочу создать выпадающий список из объекта List и установить значение по умолчанию для первого элемента объекта List. Как я могу это сделать.

Ответы [ 3 ]

0 голосов
/ 06 июня 2011

У меня нет знаний по AJAX, поэтому я не могу помочь в этом.Таким образом, мой способ решения этой проблемы - сделать все возможное в java / jsp, а затем использовать javascript / AJAX для выборки из вспомогательного jsp, например:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select>
    <c:set var="seenFirst" value="0" />
    <c:forEach var="obj" items="${sessionScope.list}">
        <c:choose>
            <c:when test="${seenFirst == 0}">
                <c:set var="seenFirst" value="1" />
                <option value="${obj}" selected>${obj}</option>         
            </c:when>

            <c:otherwise>
                <option value="${obj}">${obj}</option>
            </c:otherwise>
        </c:choose>
    </c:forEach>
</select>

Редактировать: На самом деле было бы проще создать меню сначала просто с помощью <c:forEach>, используя вспомогательную переменную для нумерации опций (в поле id), затем используйте javacript, чтобы включить выбранный атрибут в первый.Например:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select>
    <c:set var="n" value="0" />
    <c:forEach var="obj" items="${sessionScope.list}">
        <option id="menu-${n}" value="${obj}">${obj}</option>
        <c:set var="n" value="${n + 1}" />
    </c:forEach>
</select>

И вы можете использовать что-то вроде этого, чтобы выбрать первый элемент:

var first = document.getElementById('menu-0');
first.selected = true;
0 голосов
/ 06 июня 2011

Я рекомендую использовать сервлет для обработки запроса ajax, использовать JSON в качестве формата передачи данных и использовать jQuery для выполнения реального запроса ajax, а также для обхода и манипулирования деревом HTML DOM.Вы можете найти множество примеров в Как использовать сервлеты и Ajax? Ваш конкретный случай может быть решен следующим образом:

JSP:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 6250627</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('#search').keyup(function() {
                    $.get('search', $(this).serialize(), function(responseText) {
                        var $select = $('#results');
                        $select.find('option').remove();
                        $.each(responseJson, function(key, value) {
                        $('<option>').val(key).text(value).appendTo($select);
                    });
                });
            });
        </script>
    </head>
    <body>
        <form><input id="search" /></form>
        <select id="results"></select>
    </body>
</html>

Сервлет (используя Google Gson для преобразования объектов Java в строку JSON):

@WebServlet(urlPatterns={"/search"})
public class SearchServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Map<String, String> results = someService.find(request.getParameter("search"));
        String json = new Gson().toJson(results);

        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(json);
    }

}
0 голосов
/ 06 июня 2011

Вам необходимо закодировать список на стороне Java (например, в формате JSON или с использованием некоторых пользовательских разделителей), а затем использовать JavaScript в обратном вызове onSuccess, чтобы добавить options в поле выбора на основе закодированных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...