2016-12-28 2 views
0

liveScroll = "true"및 selectionMode = "multiple"인 primefaces v5.3 dataTable을 사용하고 있습니다. 머리글 확인란은 보이는 행만 선택하고 아래로 스크롤하면 새 행이 선택되지 않은 것처럼 보입니다. 머리글 확인란을 선택하여 모든 행을 표시 할 수 있습니다 (보이지 않거나 보이지 않음). 보이는 행만 선택하는 것은 의미없고 쓸모가 없습니다. 수정할 수 있습니까?primefaces에서 모두 선택하는 방법 liveScroll을 사용하여 dataTable

"toggleSelect, rowSelectCheckbox 및 rowUnselectCheckbox"이벤트를 처리하여 선택 항목에 모든 테이블 데이터를 추가하려고했습니다. 백엔드에서 작동하지만 UI 행은 선택되지 않습니다.

+0

_ " 보이는 줄만 선택하는 것은 무의미하고 쓸모가 없습니다. 수정이 가능한가? " 지난 5 년 동안이 요구 사항을 들어 본 적이 없습니다. 그리고 그것은 위험한 요구 사항입니다. 최종 사용자는 (필자는) 기대하지 않을 것이며 많은 행을 수행 할 것입니다. 드문 요구 사항이므로이 문제를 쉽게 해결할 수 있을지는 의문입니다. 구성 요소의 소스를 다운로드하여 확인하고 거기에있는 내용을 '고칠 수 있는지'를 확인하면됩니다. – Kukeltje

답변

0

사용이 스크립트가 자동으로 테이블에 새로운로드 행 (클라이언트 측에서 볼 수 있습니다 만 사람)를 선택합니다 primefaces

PrimeFaces.widget.DataTable.prototype.updateData = (function() { 

    var cached_function = PrimeFaces.widget.DataTable.prototype.updateData; 
    return function() { 
     var reselectAll = (this.selection != undefined && (this.selection[0] === '@all' || this.selection.length === this.getTbody()[0].getElementsByTagName('tr').length); 
     var result = cached_function.apply(this, arguments); 
     if (reselectAll) { 
      this.selectAllRows(); 
     } 
     return result; 
    }; 
})(); 

의 원래 때문에 updateData 기능을 대체 할

+0

xhtml에이 스크립트를 dataTable과 함께 넣습니다. 그러나 변수 테이블은 정의되지 않았고 this.selection은 @all 값을 가지지 않았습니다. 숫자 801, 802, ... 819, ... – Alexandr83

+0

만 고정되었습니다. 또한, 테이블의 selectAllRows() 메소드를 사용하여 모든 행을 선택하면 selection은 '@all'값을 갖습니다. –

+0

이제 부분적으로 작동합니다. 하지만 조건 "|| this.selection.length === this.getTbody() [0] .getElementsByTagName ('tr'). length"을 이해하지 못합니다. 나에 관해서는 불필요하거나 "|| ... ==="를 "&& ...! ="로 대체해야합니까? 그리고 내가 어떻게해야 전화 'selectAllRows(); 이해할 수 없다 '@all'toselection을 처음으로 입력해라. – Alexandr83

관련 문제