Обходной путь, который я использую сейчас:
<rich:dataTable id="grid1" value="#{monitorForm.customerList}">
<rich:column width="5">
<h:selectBooleanCheckbox value="" onclick="selectAllPackingLists(this, '#{custRow.id}')"/>
</rich:column>
<rich:subTable var="row" value="#{custRow.orderList}" rendered="#{custRow.show}">
<rich:column>
<input type='hidden' value='#{custRow.id}'/>
</rich:column>
<rich:column width="5">
<h:selectBooleanCheckbox value="#{row.checked}" />
</rich:column>
</rich:subTable>
</rich:dataTable>
функция JavaScript:
function selectAllPackingLists(o, id) {
var elem = jQuery("table[id='monitorFrm:grid1'] > tbody");
var checked = o.checked;
var rows = elem.attr('rows');
jQuery.each(rows, function(index, row) {
// for each row check if the input value in 1st column
// matches the selected customer id
var td = jQuery('td:first', this);
var hiddenFld = jQuery('input:first', td);
if (hiddenFld.val() == id) {
// set the checkbox in the 2nd column to true
var td2 = jQuery('td:nth-child(2)', this);
var cb = jQuery('input:first', td2);
jQuery(cb).attr('checked', checked);
}
});
}
Что замечательно, так это то, что установка флажков через JQuery также устанавливает значения в бине для каждого соответствующего <h:selectBooleanCheckbox value="#{row.checked}" />
Я не знал, что это сделает.