获取JSP中的下拉值并根据所选值加载其他内容

时间:2015-08-20 17:15:23

标签: javascript java html jsp

我有一个JSP页面,其中包含一个下拉项列表。我正在使用列表类型的请求属性填充此下拉列表并循环遍历该列表。

<select class="form-control" id="groupname" name="groupname">
    <c:forEach items="${visibility}" var="groupListItem">
        <option value="${groupListItem.groupName}">${groupListItem.groupName}</option>
    </c:forEach>
</select>

每当我从下拉列表中选择一个项目时,我需要在同一页面上显示一个复选框列表。复选框的标签和已选中/未选中的值也是列表属性groupListItem的一部分。

list属性是一个自定义bean,它有一个带有复选框名称和值的映射,用于决定是选中还是取消选中。

如果选择了下拉值,如何获取复选框的值?

我的列表属性如下所示。

List<GroupVisibilityBean> groupList = driverDAO.getGroupVisibility();
model.addAttribute("visibility", createGroup());

private List<GroupVisibilityBean> createGroup() {
    List<GroupVisibilityBean> groupList = new ArrayList<GroupVisibilityBean>();

    GroupVisibilityBean bean1 = new GroupVisibilityBean();
    bean1.setGroupName("GARDA");
    Map<String, String> map1 = new HashMap<String, String>();
    map1.put("Personal Details", "Y");
    map1.put("Driver Details", "N");

    GroupVisibilityBean bean2 = new GroupVisibilityBean();
    bean2.setGroupName("COURT");
    Map<String, String> map2 = new HashMap<String, String>();
    map2.put("Personal Details", "Y");
    map2.put("Driver Details", "N");

    groupList.add(bean1);
    groupList.add(bean2);

    return groupList;
}

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

  1. 您可能需要将创建的map1map2分别添加到bean1bean2。现在,他们被分配了值,但你没有像

    这样的电话
    bean1.setCheckboxMap(map1);
    

    可能需要帮助bean1访问map1等。

  2. 如果bean中有值,则需要将它们放入HTML页面。最简单的方法是(在你的foreach <option>以下f.ex.)

    <script>
      ${groupListItem} = {}; // create object of that name
      <c:forEach items="${groupListItem.checkboxMap}" var="mapItem">
          ${groupListItem}["${mapItem.key}"] = "${mapItem.value}"; // set val
      </c:forEach>
    </script>
    

    不是使用键作为JS对象的键,而是可以将bean值存储在JS数组中,如

    <script>
      ${groupListItem} = {}; // create object of that name
      ${groupListItem}.keys = [];
      ${groupListItem}.values = [];
      <c:forEach items="${groupListItem.checkboxMap}" var="mapItem">
          ${groupListItem}.keys.push("${mapItem.key}"); // append key
          ${groupListItem}.values.push("${mapItem.value}"); // append value
      </c:forEach>
    </script>
    

    另见how-to-iterate-an-arraylist-inside-a-hashmap-using-jstl。如果您想要更多努力,请使用JSON进行编码,如reading-a-jsp-variable-from-javascript中所述。

  3. 如果值是HTML格式,则需要更改复选框,或者在下拉列表更改时通过Javascript动态创建它们。要检测下拉事件,请参阅dropdown-using-javascript-onchange