繁体   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