Заполнение располагающий каскадом выпадающие списки в JSP/Servlet

Предположим, что у меня есть три названные средств управления dropdownlist dd1, dd2 и dd3. Значение каждого dropdownlist прибывает из базы данных. dd3значение зависит от значения dd2 и dd2значение зависит от значения dd1. Кто-либо может сказать мне, как я называю сервлет для этой проблемы?

40
задан BalusC 25 February 2016 в 08:35
поделиться

3 ответа

Есть три способа добиться этого:

  1. Передать форму сервлету во время события onchange первого выпадающего списка (для этого можно использовать Javascript), пусть сервлет получит выбранный элемент первого выпадающего списка как параметр запроса, пусть он получит связанные значения второго выпадающего списка из базы данных как Map, пусть он сохранит их в области запроса. Наконец, пусть JSP/JSTL отобразит значения во втором выпадающем списке. Вы можете использовать JSTL (просто бросьте jstl-1.2.jar в /WEB-INF/lib) c:forEach tag для этого. Вы можете предварительно заполнить 1-й список в doGet() методе Servlet, связанном с JSP-страницей.

    
     
     
     
     
     .
     
    
     
     .
     
    
    
    

    Однако есть одно предостережение: это может стать неоправданно длинным и дорогим, если у вас много элементов. Представьте, что у вас есть 3 шага по 100 возможных элементов, что означает 100 * 100 * 100 = 1 000 000 элементов в JS объектах. Длина HTML-страницы превысит 1 МБ.

  2. Используйте XMLHttpRequest в Javascript для асинхронного запроса к сервлету во время события onchange первого выпадающего списка, пусть сервлет получит выбранный элемент первого выпадающего списка в качестве параметра запроса, пусть он получит связанные значения второго выпадающего списка из базы данных, верните его обратно в виде XML или JSON строки. Наконец, позвольте Javascript отобразить значения во втором выпадающем списке через дерево HTML DOM (способ Ajax, как предлагалось ранее). Лучшим способом для этого будет использование jQuery.

    <%@ page pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
    
     
     Вопрос 2263996
     
     
     
     
     

    ...где сервлет за /json/options может выглядеть следующим образом:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     String dd = request.getParameter("dd"); // ID дочернего DD для заполнения опций.
     String val = request.getParameter("val"); // Значение родительского DD для поиска связанных опций дочернего DD.
     Map options = optionDAO.find(dd, val);
     String json = new Gson().toJson(options);
     response.setContentType("application/json");
     response.setCharacterEncoding("UTF-8");
     response.getWriter().write(json);
    }
    

    Здесь Gson - это Google Gson, который облегчает преобразование полнофункциональных Java-объектов в JSON и наоборот. См. также Как использовать сервлеты и Ajax?

49
ответ дан 27 November 2019 в 01:45
поделиться

При некотором гуглинге я нашел OpenXML4J . Это может решить вашу проблему. Я не использовал это, прежде чем я уверен, что кто-то в сообществе получит лучшее понимание.

Примечание: Это дублирующий вопрос. Это имеет решение плюс немного обсуждения. Ссылка на вопрос.

-121--4746212-

то, что я использовал ранее, это то, что вы должны обнаружить событие mousedown, записать его x, y местоположение (в зависимости от того, что является релевантным), затем обнаружить событие mouseup и вычесть два значения.

-121--587362-

Судя по вашему вопросу, вы действительно используете не веб-инфраструктуру, а сервлеты для визуализации html.

Я буду милым и скажу, что вы отстаете от времени примерно на десятилетие:) люди используют JSP (и веб-инфраструктуру, такую как стойки) для такого рода вещей. Однако, сказав, что:

  1. Создайте скрытое поле в форме и установите значение '1', '2' или '3' в зависимости от того, какой раскрывающийся список должен быть заполнен;
  2. В сервлете зафиксируйте это значение (request.getParamter ()) и используйте его инструкцию 'case '/if/else, чтобы вернуть соответствующие значения раскрывающегося списка.

Я скажу это еще раз, просто используйте веб-фреймворк или, по крайней мере, простой старый jsp для этого.

4
ответ дан 27 November 2019 в 01:45
поделиться

Для этого вам может потребоваться несколько сервлетов.

Сервлет 1: Загрузить значения для первого раскрывающегося списка из базы данных. На странице JSP создайте раскрывающийся список. Когда пользователь выбирает значение, отправляется на второй сервлет.

Сервлет 2: получить значение из первого списка и выполнить поиск в базе данных значений второго списка. Составьте второй список. Когда пользователь выбирает второе значение, отправьте его сервлету 3.

Сервлет 3: извлеките значение, выбранное во втором раскрывающемся списке, и выполните поиск в базе данных, чтобы получить значения для последнего раскрывающегося списка.

Вы можете рассмотреть возможность использования AJAX, чтобы заполнение списков казалось пользователям простым. В jQuery есть несколько очень хороших плагинов, которые упрощают эту задачу, если вы готовы это сделать.


     <form action="servlet2.do">
          <select name="dd1" onchange="Your JavaScript Here">
               <option>....
          </select>
     </form>

Вы можете написать JavaScript, который отправляет форму в событии onchange. Опять же, если вы используете существующую библиотеку, например jQuery, это будет в 10 раз проще.

4
ответ дан 27 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: