如何在PrimeFaces中找出DataTable是否处于行编辑状态?

问题描述 投票:1回答:1

我的DataTableeditMode"row"。因此,用户单击铅笔图标开始编辑行,然后单击复选标记图标以确认并结束编辑。它们对某些行执行相同操作,然后单击“保存”按钮将所有已编辑的行保存在一个事务中。但是,他们可以在结束编辑之前点击保存按钮;在这种情况下,我需要停止保存并告诉他们在保存之前结束行编辑。

问题是如何确定表是否处于编辑状态?

我的DataTable是这样的:

        <p:dataTable id="myTable"
                     value="#{myBean.dataModel}"
                     editMode="row"
                     editable="true"
                     var="row"
                     rowKey="#{row.id}"
                     rowIndexVar="rowIndex">
            <p:column>
                <p:rowEditor/>
            </p:column>
            <p:column headerText="label">
                <p:cellEditor>
                    <f:facet name="input">
                        <p:inputText value="#{row.label}" />
                    </f:facet>
                    <f:facet name="output">
                        <h:outputText value="#{row.label}"/>
                    </f:facet>
                </p:cellEditor>
            </p:column>
            <p:column headerText="name" >
                <p:cellEditor>
                    <f:facet name="input">
                        <p:inputText value="#{row.name}"/>
                    </f:facet>
                    <f:facet name="output">
                        <h:outputText value="#{row.name}"/>
                    </f:facet>
                </p:cellEditor>
            </p:column>
        </p:dataTable>

顺便说一句,有一个名为editingRow的财产,其访问者isEditingRowsetEditingRow,我希望是我的答案;但事实并非如此。似乎setEditingRow从未被召唤过。

我正在使用PrimeFaces 6.1和JSF 2.2。

primefaces pf-datatable
1个回答
1
投票

使用行编辑Ajax事件rowEdit(当编辑行时),rowEditInit(当行切换到编辑模式时)和rowEditCancel(当行编辑被取消时)以跟踪表的编辑状态。

最简单的形式是bean:

private int edits = 0;

public void startEdit(RowEditEvent event) {
  edits++;
}

public void stopEdit(RowEditEvent event) {
  edits--;
}

public boolean isEditing() {
  return edits > 0;
}

数据表:

<p:dataTable ...>
  <p:ajax event="rowEditInit" listener="#{myBean.startEdit}"/>
  <p:ajax event="rowEdit" listener="#{myBean.stopEdit}"/>
  <p:ajax event="rowEditCancel" listener="#{myBean.stopEdit}"/>
</p:dataTable>

如果仅仅对您进行简单计数,您可以跟踪正在编辑的对象:

private Set<Object> editObjects = new HashSet<>();

public void startEdit(RowEditEvent event) {
  editObjects.add(event.getObject());
}

public void stopEdit(RowEditEvent event) {
  editObjects.remove(event.getObject());
}

public boolean isEditing() {
  return !editObjects.isEmpty();
}

请注意,RowEditEvent#getObject()返回行数据。

© www.soinside.com 2019 - 2024. All rights reserved.