Заполнение располагающий каскадом выпадающие списки в JSP/Servlet
Предположим, что у меня есть три названные средств управления dropdownlist dd1, dd2 и dd3. Значение каждого dropdownlist прибывает из базы данных. dd3значение зависит от значения dd2 и dd2значение зависит от значения dd1. Кто-либо может сказать мне, как я называю сервлет для этой проблемы?
Передать форму сервлету во время события onchange первого выпадающего списка (для этого можно использовать Javascript), пусть сервлет получит выбранный элемент первого выпадающего списка как параметр запроса, пусть он получит связанные значения второго выпадающего списка из базы данных как Map, пусть он сохранит их в области запроса. Наконец, пусть JSP/JSTL отобразит значения во втором выпадающем списке. Вы можете использовать JSTL (просто бросьте jstl-1.2.jar в /WEB-INF/lib) c:forEach tag для этого. Вы можете предварительно заполнить 1-й список в doGet() методе Servlet, связанном с JSP-страницей.
Однако есть одно предостережение: это приведет к отправке всей формы и вызовет "вспышку содержимого", что может плохо сказаться на пользовательском опыте. Вам также потребуется сохранить другие поля в той же форме на основе параметров запроса. В сервлете также необходимо определить, является ли запрос обновлением выпадающего списка (значение дочернего выпадающего списка равно null) или отправкой самой формы.
Выведите все возможные значения 2-го и 3-го выпадающих элементов в виде объекта Javascript и используйте функцию Javascript для заполнения 2-го выпадающего элемента на основе выбранного элемента 1-го выпадающего элемента во время события onchange 1-го выпадающего элемента. Здесь не требуется отправка формы и серверный цикл.
.
Однако есть одно предостережение: это может стать неоправданно длинным и дорогим, если у вас много элементов. Представьте, что у вас есть 3 шага по 100 возможных элементов, что означает 100 * 100 * 100 = 1 000 000 элементов в JS объектах. Длина HTML-страницы превысит 1 МБ.
Используйте XMLHttpRequest в Javascript для асинхронного запроса к сервлету во время события onchange первого выпадающего списка, пусть сервлет получит выбранный элемент первого выпадающего списка в качестве параметра запроса, пусть он получит связанные значения второго выпадающего списка из базы данных, верните его обратно в виде XML или JSON строки. Наконец, позвольте Javascript отобразить значения во втором выпадающем списке через дерево HTML DOM (способ Ajax, как предлагалось ранее). Лучшим способом для этого будет использование jQuery.
При некотором гуглинге я нашел OpenXML4J . Это может решить вашу проблему. Я не использовал это, прежде чем я уверен, что кто-то в сообществе получит лучшее понимание.
Примечание: Это дублирующий вопрос. Это имеет решение плюс немного обсуждения. Ссылка на вопрос.
-121--4746212-
то, что я использовал ранее, это то, что вы должны обнаружить событие mousedown, записать его x, y местоположение (в зависимости от того, что является релевантным), затем обнаружить событие mouseup и вычесть два значения.
-121--587362-
Судя по вашему вопросу, вы действительно используете не веб-инфраструктуру, а сервлеты для визуализации html.
Я буду милым и скажу, что вы отстаете от времени примерно на десятилетие:) люди используют JSP (и веб-инфраструктуру, такую как стойки) для такого рода вещей. Однако, сказав, что:
Создайте скрытое поле в форме и установите значение '1', '2' или '3' в зависимости от того, какой раскрывающийся список должен быть заполнен;
В сервлете зафиксируйте это значение (request.getParamter ()) и используйте его инструкцию 'case '/if/else, чтобы вернуть соответствующие значения раскрывающегося списка.
Я скажу это еще раз, просто используйте веб-фреймворк или, по крайней мере, простой старый jsp для этого.
Для этого вам может потребоваться несколько сервлетов.
Сервлет 1: Загрузить значения для первого раскрывающегося списка из базы данных. На странице JSP создайте раскрывающийся список. Когда пользователь выбирает значение, отправляется на второй сервлет.
Сервлет 2: получить значение из первого списка и выполнить поиск в базе данных значений второго списка. Составьте второй список. Когда пользователь выбирает второе значение, отправьте его сервлету 3.
Сервлет 3: извлеките значение, выбранное во втором раскрывающемся списке, и выполните поиск в базе данных, чтобы получить значения для последнего раскрывающегося списка.
Вы можете рассмотреть возможность использования AJAX, чтобы заполнение списков казалось пользователям простым. В jQuery есть несколько очень хороших плагинов, которые упрощают эту задачу, если вы готовы это сделать.
Вы можете написать JavaScript, который отправляет форму в событии onchange. Опять же, если вы используете существующую библиотеку, например jQuery, это будет в 10 раз проще.