0

オブジェクトのリストをサーブレットから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ページで次のボタンがクリックされたときに、チェックボックスが選択された連絡先オブジェクトのリストをサーブレットに送信する必要があるということです。私は以下のようにしようとしています。

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

サーブレット内のすべての連絡先オブジェクトをセッションに入れることで取得できますが、チェックボックスがオンになっている連絡先のみが必要です。誰かがこれについて私を助けてくれますか?

4

3 に答える 3

1

チェックボックスに、チェックされた値を識別する一意の値を与える必要があります。

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

次にHttpServletRequest#getParameterValues()、チェックされたすべての値を取得するために使用できます。

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

それで全部です。送信時にJS配列に収集する必要はありません。これは醜い JS ハックであり、正常に劣化しません (つまり、エンドユーザーが 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 には id ではなく value 属性セットが必要です。

<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 に答える