Как я могу проверить выбор серии в простых данных - PullRequest
0 голосов
/ 14 октября 2018

У меня есть сценарий, в котором мне нужно проверить выбор ряда строк в 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);
    }

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Дайте атрибуту 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.(это общая идея, есть немного больше деталей).

0 голосов
/ 16 октября 2018

Просто установите обработчик событий ajax для rowUnselectCheckbox и rowSelectCheckbox и включите / отключите кнопку в желаемом сценарии.

<p:ajax event="rowSelectCheckbox" listener="#{bean.eventListener}" />
<p:ajax event="rowUnselectCheckbox" listener="#{bean.eventListener}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...