簡體   English   中英

Primefaces - 如何獲取CellEditEvent的列

[英]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()返回一個實現UIColumnDynamicColumn 然后你可以使用:

((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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM