我的DataTable
' editMode
是"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
的属性及其访问者isEditingRow
和setEditingRow
,我希望这是我的答案;但是,它不是。似乎永远不会调用setEditingRow
。
我使用的是PrimeFaces 6.1和JSF 2.2。
答案 0 :(得分:1)
使用行编辑Ajax事件rowEditCancel
(编辑行时),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>
(当行编辑被取消时)到跟踪表格的编辑状态。
最简单的形式是bean:
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()
如果仅仅对您进行计数是不够的,您可以跟踪正在编辑的对象:
xalloc
请注意,pword
会返回行数据。