Дайте атрибуту dataTable selection
новый список того же типа, что и текущий список.поместите 4 ajax в вашу таблицу данных с listener
и update
, в слушателях проверьте два списка, чтобы увидеть, выполняется ли ваше условие, поместите его в логическое значение и используйте его в атрибуте disabled
ваших кнопок.не забудьте обновить кнопки с идентификатором клиента, если они находятся в другой форме.
<p:dataTable id="datalist"
value="#{bean.items}" var="item"
selection="#{bean.selectedItems}
editable="true"
editMode="cell"
rowKey="#{item.id}">
<p:ajax event="rowSelect" update="form:disabledBtn form:enabledBtn" listener="#{bean.setBtnDisabled()}"/>
<p:ajax event="rowUnselect" update="form:disabledBtn form:enabledBtn" listener="#{bean.setBtnDisabled()}"/>
<p:ajax event="rowSelectCheckbox" update="form:disabledBtn form:enabledBtn" listener="#{bean.setBtnDisabled()}"/>
<p:ajax event="rowUnselectCheckbox" update="form:disabledBtn form:enabledBtn" listener="#{bean.setBtnDisabled()}"/>
<p:column selectionMode="multiple"/>
Вы также можете выполнить логическую проверку на стороне клиента с помощью JavaScript, я не помню много, но общееИдея в том, чтобы взять dataTable dom в вашем ajax oncomplete
, циклически просмотреть дочерние элементы и проверить на наличие элементов с классом selected
и проверить там свой boolean
, отключить ваши кнопки с помощью css и pointer-event
или с помощьюremoteCommand
чтобы переключить ваш boolean
.(это общая идея, есть немного больше деталей).