Проверить значение f:items на основе p:selectManyCheckbox, используя JavaScript

Я хотел бы знать, как проверить значение f:items на основе p:selectManyCheckbox, используя JavaScript.

Что я сделал, это Xhtml

<p:selectBooleanCheckbox itemLabel="Select All" onchange="changeSelectAllStatus(this);"
    value="#{myBean.selectAllStatus}"
    id="selectAllStatus" style="margin-left:4px;" >
</p:selectBooleanCheckbox>

<p:selectManyCheckbox onchange="changeServiceStatus(this);"
    styleClass="servicestatusstyle"
    value="#{myBean.serviceStatusFilterList}"
    layout="pageDirection" id="empListSub">
    <f:param name="tabValue" value="1" />
    <f:selectItems value="#{myBean.serviceStatusList}" var="status"
            itemLabel="#{status.title}" itemValue="#{status.id}"/>
</p:selectManyCheckbox>

Сгенерированный HTML

Javascript

function changeSelectAllStatus(element)
    {
         var selectAll = element.checked;
         var serviceStatusChildNodes = document.getElementById("accord:empListSub").getElementsByTagName('input');
         for ( var i in serviceStatusChildNodes ) {
             if ( serviceStatusChildNodes[i].type=='checkbox' ) {
                 serviceStatusChildNodes[i].checked = selectAll;
             }
         }

        if(selectAll)
        {
            selectAllStatusArray = selectAll;

        }
        else
        {
            selectAllStatusArray = selectAll;

        }
    }

Моя проблема в том, что когда выбрано "выбрать все", проверяемые значения f:items устанавливаются как true, но в пользовательском интерфейсе это не проверяется. Кто-нибудь может указать, где я ошибся?

1 ответ

Решение

Просто вы можете сделать это:

<p:selectBooleanCheckbox itemLabel="Check All" 
                         widgetVar="checkAllWV"
                         onchange="selectAllCheckBoxes(PF('manyCheckWV'))">
</p:selectBooleanCheckbox>

<p:selectManyCheckbox widgetVar="manyCheckWV">                                                    
   <f:selectItems value="#{mainBean.list}"/>
</p:selectManyCheckbox>

onchange из booleanCheckbox будет управлять значениями manyCheckbox.

Теперь событие изменения

function selectAllCheckBoxes(manyCheckBoxes) {
   manyCheckBoxes.inputs.each(function() {
      if(PF('checkAllWV').isChecked()) {
         $(this).prop('checked', false)
         PF('checkAllWV').jq.find('.ui-chkbox-label').text('Uncheck all')
      } else {
         $(this).prop('checked', true)
         PF('checkAllWV').jq.find('.ui-chkbox-label').text('Check all')
      }
      $(this).trigger('click');
   })
}

Вы можете найти небольшой пример на GitHub.

Другие вопросы по тегам