0

我正在将对象列表从 servlet 传递到 JSP。在 JSP 页面上显示它们,例如

<c:forEach items="${plcContacts}" var="contact">
    <tr>
    <td><input type="checkbox" name="contacts" class="case" id ="${contact.col2}" >></input><br></td>
    <td>${contact.col5}</td>
    <td>${contact.col4}</td>
    <td class="teamFunction">${contact.col2}</td>
    </tr>
    </c:forEach>

在上面,

contact.col5 is email id, 
contact.col4 is name,
contact.col2 is team member function. 

所以我有选择所有联系人的按钮,取消选择所有联系人,基于他们的功能的联系人。我已经使用 JQuery 成功完成了它,如下所示。

 // add multiple select functionality
    $("#CheckAll").click(function () {
          $('.case').prop('checked', true);
    });

    $("#UnCheckAll").click(function () {
          $('.case').prop('checked', false);
    });

// check by Function
    $("#CheckByFunction").click(function() {    
        $('input[type=checkbox]').each(function () {
            var plc = $('#plcFunction').val().replace(/ /g, '-');
            var teamFunction =  this.id.replace(/ /g, '-');
            if (plc == teamFunction) {
                $(this).prop('checked', true);
            } else {
                 $(this).prop('checked', false);
            }
        });
    });

我的问题是,当在此 JSP 页面上单击下一步按钮时,我需要将选中复选框的联系人对象列表发送到 servlet。我正在尝试像下面那样做。

**//read all the checked contacts**
$("#Next").click(function() {
  selected = new Array();
  $("input[type='checkbox']:checked").each(function() { 
    selected.push($(this).val());
  });
});

我可以通过将它们放入 session 来检索 servlet 中的所有联系人对象,但我只需要选中复选框的联系人。有人可以帮我吗?

4

3 回答 3

1

你需要给你的复选框一个唯一的值来标识选中的值:

<input type="checkbox" name="contacts" value="${contact.col2}" />

然后您可以使用HttpServletRequest#getParameterValues()来获取所有检查值:

String[] checkedContacts = request.getParameterValues("contacts");

就这样。提交时无需将其收集到某个 JS 数组中。这是一个丑陋的 JS hack,它不会优雅地降级(即,如果最终用户禁用了 JS,则整个提交都会中断)。

于 2013-01-22T15:19:33.623 回答
0

好吧,您将undefined值存储在数组中,因为您的复选框没有value属性,而且您的标记无效,input元素没有结束</input>标记,假设您的输入具有以下类,您可以使用map方法并将值存储在数组中。

var selected = $('#table tr').has('input[type=checkbox]').map(function(){
       var $this = $(this);
       return {
          val: $this.find('input[type=checkbox]').val(),
          email: $this.find('input[type=text].email').val(),              
          name: $this.find('input[type=text].name').val(),
          // ...
       }
})  
于 2013-01-21T20:51:04.990 回答
0

首先,您的 html 需要一个 value 属性集,而不是 id:

<c:forEach items="${plcContacts}" var="contact">
    <tr>
    <td><input type="checkbox" name="contacts" class="case" value="${contact.col2}"></input></td>
    </tr>
</c:forEach>

其次,您的 javascript 应该类似于以下内容:

$("#CheckAll").click(function () {
    //Notice use of attr here, not prop
    $('.case').attr('checked', true);
});

$("#UnCheckAll").click(function () {
      //notice we are remove attr
      $('.case').removeAttr('checked');
});

//should be able to complete the fill by function based off the above

//to get the selected, you weren't far off, biggest thing should actually be
//the setting of value instead of id.
var selected = [];
$("input[type='checkbox']:checked").each(function() { 
    selected.push($(this).val());
});
//spit the array out so you can see what you end up with.
console.log(selected)
于 2013-01-21T20:41:26.893 回答