Primefaces Datatable已禁用通过检查选择更新

时间:2018-11-07 23:20:00

标签: spring jsf primefaces datatable updates

当达到 Primefaces数据表上选择的 20个复选框的限制时,我需要阻止一些复选框,如果复选框低于20,则我取消阻止 复选框

这是我的代码:

在我的数据表上:

disabledSelection="#{trackingController.selectedVehicles.size() ge 20 and trackingController.checkboxChecked[vehicle.vehicleId] eq false}"

<p:column selectionMode="multiple" style="width:16px;text-align:center"/>
<p:column visible="false">
    <p:outputLabel id="mapCol" styleClass="mapCol" value="#{trackingController.selectedValue(vehicle.vehicleId)}" />
</p:column>

在我的控制器上:

private Map<Long,Boolean> checkboxChecked = new HashMap<Long,Boolean>();

/*Some method when check*/
checkboxChecked.replace(vehicleEntity.getVehicleId(),true);

/*Some method when uncheck*/
checkboxChecked.replace(vehicleEntity.getVehicleId(),false);

/*To get the actual boolean of the check*/
public boolean selectedValue(long vehicleId){
    Boolean res = checkboxChecked.get(vehicleId);
    return res;
}

所有这些实际上都很好:

enter image description here

达到20个限制,然后分页:

enter image description here

21值已被禁用,无法检查(优秀) 但是,如果我取消选中 前20个之一,那么检查分页的孤独值 我有一个值我的前20位残疾人(确定):

enter image description here

如果我取消选中前20个值中的其他值,则会出现以下行为:

现在可以选中已阻止的复选框,现在总共可以选中2个复选框

但是我得到的是,已阻止的复选框仍被阻止

enter image description here

disabledSelection 仅在进行分页时有效。 我还没有找到一种刷新复选框的方式来实现我想要的行为。

如果有人对 disabledSelection 如何更新刷新有任何想法,我将非常感谢。问候。

1 个答案:

答案 0 :(得分:0)

A可以尝试添加p:ajax作为p:dataTable的子级,以更新rowSelectrowUnselecttoggleSelect事件上的表:

<p:dataTable ...>
  <p:ajax event="rowSelect" process="@this" update="@this"/>
  <p:ajax event="rowUnselect" process="@this" update="@this"/>
  <p:ajax event="toggleSelect" process="@this" update="@this"/>
...
</p:dataTable>