![](/img/trans.png)
[英]Primefaces 10+ Datatable how to get sorted column from SortEvent?
[英]Primefaces - how to get the column of a CellEditEvent
我正在使用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()。
相反,它有一个getColumn()方法,返回一个UIColumn对象。
问题是,在调试时,我找不到获取任何列信息的方法(名称,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中检索已编辑单元格的列?
PS。 我觉得我错过了一些东西,因为没有人会在没有提供行和列的情况下创建单元格事件,对吧?
更新 - 似乎我可以获得ID
org.primefaces.component.column.Column o = (org.primefaces.component.column.Column)event.getColumn();
不过,这对我来说似乎是个黑客。 我仍然对这个更优雅的解决方案感兴趣;-)
您可以通过返回您传递的列标题来获取列。
在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代码 - 使其难以使用。
如果使用p:columns
而不是p:column
- 这也更具可读性 - event.getColumn()
返回一个实现UIColumn
的DynamicColumn
。 然后你可以使用:
((DynamicColumn)event.getColumn())。getIndex()
确定列索引。 还有一个column.isDynamic()
来检查有效性。
使用标头需要更多代码,可能效率更低。
我发现只有一种方法可以做到这一点。 在xhtml上,向列中添加一个id:
<p:column id="myColumn">
...
</p:column>
在backing bean中, column.getColumnKey()
将返回一个生成的id,其中包含您在xhtml中设置的id(类似于j_idt30:j_idt32:0:contratoReal
)。 因此,你可以这样做:
public void onCellEdit(CellEditEvent event) {
if (event.getColumn().getColumnKey().endsWith("myColumn")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.