当达到 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;
}
所有这些实际上都很好:
达到20个限制,然后分页:
21值已被禁用,无法检查(优秀) 但是,如果我取消选中 前20个之一,那么检查分页的孤独值 我有一个值我的前20位残疾人(确定):
如果我取消选中前20个值中的其他值,则会出现以下行为:
现在可以选中已阻止的复选框,现在总共可以选中2个复选框
但是我得到的是,已阻止的复选框仍被阻止:
disabledSelection 仅在进行分页时有效。 我还没有找到一种刷新复选框的方式来实现我想要的行为。
如果有人对表或 disabledSelection 如何更新或刷新有任何想法,我将非常感谢。问候。
答案 0 :(得分:0)
A可以尝试添加p:ajax
作为p:dataTable
的子级,以更新rowSelect
,rowUnselect
和toggleSelect
事件上的表:
<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>