我将如何验证Primefaces数据表中的系列选择

时间:2018-10-14 11:52:50

标签: jsf primefaces

我有需要验证datatable中行的系列选择的方案。当连续选择行时,我需要启用按钮,而当未连续选择行时,我需要禁用按钮。

Disable Button

Enable Button

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);
    }

2 个答案:

答案 0 :(得分:0)

只需为rowUnselectCheckbox和rowSelectCheckbox放置一个ajax事件处理程序,然后在所需的方案中启用/禁用该按钮。

<p:ajax event="rowSelectCheckbox" listener="#{bean.eventListener}" />
<p:ajax event="rowUnselectCheckbox" listener="#{bean.eventListener}" />

答案 1 :(得分:0)

为dataTable的selection属性提供一个新列表,该列表与当前列表的类型相同。 在listenerupdate的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-eventremoteCommand禁用按钮来切换boolean。 (其总体思路是,还有更多细节)。