Primefaces - 如何获取CellEditEvent的列

Leo*_*Leo 5 java jsf primefaces jsf-2

我正在使用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)));
}  
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

该事件有一个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>               
Run Code Online (Sandbox Code Playgroud)

但我仍然找不到从CellEditEvent中检索列id的方法

所以,假设一个单元格是一个有行和一列的东西,我不得不问

如何在CellEditEvent中检索已编辑单元格的列?

PS.我觉得我错过了一些东西,因为没有人会在没有提供行和列的情况下创建单元格事件,对吧?

更新 - 似乎我可以获得ID

org.primefaces.component.column.Column o = (org.primefaces.component.column.Column)event.getColumn();
Run Code Online (Sandbox Code Playgroud)

不过,这对我来说似乎是个黑客.我仍然对这个更优雅的解决方案感兴趣;-)

Jan*_*Jan 7

您可以通过返回您传递的列标题来获取列.

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

}
Run Code Online (Sandbox Code Playgroud)

使用getColumnId()或getColumnKey()返回列Id,但添加了primefaces代码 - 使其难以使用.