我正在使用 primefaces 4。
我正在使用一个可编辑的表格,当我编辑一个单元格时,一个监听器方法被调用并传递一个 CellEditEvent
像这样
public void onCellEdit(CellEditEvent event) {
/*
* The rowIndex here can be changed according to the sorting/filtering.
* FilteredData starts as null, but primefaces initializes it, so you
* don't have to check for NPE here
*/
int alteredRow = event.getRowIndex();
UIColumn o = event.getColumn();
System.out.println(this.filteredData.get(event.getRowIndex()).get(columns.get(0)));
}
到目前为止,还不错。
事件有一个getRowIndex()
但它没有 getColumnIndex()。
相反,它有一个返回 UIColumn 对象的 getColumn() 方法。
问题是,在调试时,我找不到获取任何列信息(名称、ID 等)的方法
我可以破解该列以获得一些像这样的唯一 ID
<p:ajax event="cellEdit" listener="#{myMB.onCellEdit}"/>
<c:forEach items="#{myMB.columns}" var="column" varStatus="loop">
<p:column id="col#{loop.index}" headerText="#{column}" sortBy="#{column}" filterBy="#{column}" filterMatchMode="contains"/>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{dataRow[column]}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{dataRow[column]}" />
</f:facet>
</p:cellEditor>
</p:column>
</c:forEach>
但我仍然找不到从 CellEditEvent 中检索列 ID 的方法
所以,假设一个单元格有一行和一列,我不得不问
如何在 CellEditEvent 中检索已编辑单元格的列?
附言。我觉得我遗漏了什么,因为没有人会在不提供行和列的情况下创建单元格事件,对吗?
更新 - 看来我可以得到像这样的ID
org.primefaces.component.column.Column o = (org.primefaces.component.column.Column)event.getColumn();
不过,这对我来说似乎是一个 hack。我仍然对更优雅的解决方案感兴趣 ;-)
最佳答案
您可以通过返回引用您传递的列标题来获取该列。
在 bean 中你可以这样做:
public void onCellEdit(CellEditEvent event) {
int alteredRow = event.getRowIndex();
String column_name;
column_name=event.getColumn().getHeaderText();
// now you can use this to identify the column we are working on.
}
使用 getColumnId() 或 getColumnKey() 返回列 ID,但添加了 primefaces 代码 - 使其难以使用。
关于java - Primefaces - 如何获取 CellEditEvent 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21881767/