我有一个类型A的列表,其中每个元素都包含另一个类型B的列表。我想创建一种形式,当用户从包含A值的下拉列表中选择一个值时,另一个下拉列表将填充基于我是jQuery的新手,但我知道使用jQuery而不是纯jsp可以方便地进行此操作。请给我一个大致的步骤概述,以完成此步骤。
JSP只是服务器侧视图技术。它不能与jQuery竞争。您可以完美地继续使用JSP。但我知道您想使用Ajaxical技术而非同步请求来触发异步请求。在JSP中也没有问题。
首先,我们需要在JSP中有两个下拉菜单:
<select id="dropdown1"> <c:forEach items="#{bean.items}" var="item"> <option value="#{item.value}">#{item.label}</option> </c:forEach> </select> <select id="dropdown2"> <option>Please select dropdown1</option> </select>
然后,我们需要在change事件上附加一些jQuery,以便它根据第一个下拉列表的值填充第二个下拉列表。将以下内容添加到<script>JSP中或通过<script src>JSP 加载的外部脚本中:
change
<script>
<script src>
$(document).ready(function() { $('#dropdown1').change(function() { var selectedValue = $(this).val(); var servletUrl = 'dropdown2options?value=' + selectedValue; $.getJSON(servletUrl, function(options) { var dropdown2 = $('#dropdown2'); $('>option', dropdown2).remove(); // Clean old options first. if (options) { $.each(opts, function(key, value) { dropdown2.append($('<option/>').val(key).text(value)); }); } else { dropdown2.append($('<option/>').text("Please select dropdown1")); } }); }); });
在后面的servlet中url- pattern,/dropdown2options只需将选项映射返回为JSON即可。您可以为此使用Gson。
url- pattern
/dropdown2options
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String selectedValue = request.getParameter("value"); Map<String, String> options = optionDAO.find(selectedValue); String json = new Gson().toJson(options); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); }
基本上就是全部。