![](/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.