我有需要验证datatable中行的系列选择的方案。当连续选择行时,我需要启用按钮,而当未连续选择行时,我需要禁用按钮。
XTML
<p:dataTable id="listStackFormTable" var="stackLine"
scrollRows="80" scrollable="true" rowIndexVar="rowIndex"
value="#{stackEditBean.listStackLineForm}"
selection="#{stackEditBean.stackLinesSelected}"
sortBy="#{stackLine.serialNo}" editingRow="cell" editable="true"
rowKey="#{stackLine}"
styleClass="table-f no-h-scroll stack-Listing">
<p:ajax event="toggleSelect"
listener="#{stackEditBean.rowSelect}"
update="listStackFormTable" process="@this"></p:ajax>
<p:ajax event="rowSelect" listener="#{stackEditBean.rowSelect}"
update="listStackFormTable" process="@this" />
<p:ajax event="rowSelectCheckbox"
listener="#{stackEditBean.rowSelect}"
update="listStackFormTable" process="@this"></p:ajax>
<p:ajax event="rowUnselectCheckbox"
listener="#{stackEditBean.rowUnSelect}"
update="listStackFormTable" process="@this"></p:ajax>
</p:dataTable>
Java
private List<StackLineForm> stackLinesSelected;
private List<StackLineForm> listStackLineForm;
public void rowSelect(SelectEvent event) {
StackLineForm selectedRow = (StackLineForm) event.getObject();
List<StackLineForm> list = new ArrayList<StackLineForm>();
for (StackLineForm form : this.stackLinesSelected) {
list.add(form);
form.setSelectedStackLineFlag(true);
}
this.getDimHarvestBackingBean().setListSelectedDim(list);
this.setStackLinesSelected(list);
}
public void rowUnSelect(UnselectEvent event) {
StackLineForm selectedRow = (StackLineForm) event.getObject();
List<StackLineForm> list = this.stackLinesSelected;
for (StackLineForm form : this.stackLinesSelected) {
if (selectedRow.getSaKey().equals(form.getSaKey())) {
selectedRow.setSelectedStackLineFlag(false);
list.remove(selectedRow);
}
}
this.getDimHarvestBackingBean().setListSelectedDim(list);
this.setStackLinesSelected(list);
}
答案 0 :(得分:0)
只需为rowUnselectCheckbox和rowSelectCheckbox放置一个ajax事件处理程序,然后在所需的方案中启用/禁用该按钮。
<p:ajax event="rowSelectCheckbox" listener="#{bean.eventListener}" />
<p:ajax event="rowUnselectCheckbox" listener="#{bean.eventListener}" />
答案 1 :(得分:0)
为dataTable的selection
属性提供一个新列表,该列表与当前列表的类型相同。
在listener
和update
的dataTable中放入4个ajax,在侦听器中检查两个列表以查看是否满足您的条件,将其放入boolean并在您的disabled
属性中使用纽扣。如果按钮采用其他形式,请不要忘记使用客户端ID更新按钮。
<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
。 (其总体思路是,还有更多细节)。