通过RowEditEvent获取rowIndex

Adi*_*tzu 1 datatable jsf primefaces

我有一个简单的问题,但我无法找到正确的答案.

我渲染一个非常复杂的数据表:

<p:dataTable var="label" value="#{labelsManager.labelsList}" rowKey="#{label.cod}" editable="true"
                                rowsPerPageTemplate="5,10,15,30" paginator="true" paginatorPosition="bottom" rows="30"
                                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                rendered="#{not empty labelsManager.labelsList}" scrollable="true" scrollHeight="300" id="labelsList" sortMode="multiple"
                                selection="#{labelsManager.selectedLabelsForDelete}">
<p:ajax event="rowEdit" listener="#{labelsManager.onRowEdit}" />
...some code...
</dataTable>
Run Code Online (Sandbox Code Playgroud)

和方法

public void onRowEdit(RowEditEvent event) {
 ... here I want to get the index on the current row...
}
Run Code Online (Sandbox Code Playgroud)

当我想编辑一行时,我还想获得将被编辑的当前行的索引.我搜索了很多,但我看不出如何从RowEditEvent中提取id.

我还尝试将行的索引作为属性发送但没有成功.有任何想法吗?谢谢!

kol*_*sus 5

您的数据表已经通过您设置的属性携带活动行信息rowKey="#{label.cod}".这给你留下了许多选项,其中最灵活的是类getRowIndex()上的变量,DataTable如下所示:

public void onRowEdit(RowEditEvent event) {
   AjaxBehaviorEvent evt = (AjaxBehaviorEvent)event;
   (DataTable) table = evt.getSource();
    int activeRow  = table.getRowIndex(); //do whatever you want with it
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您的列表项已正确实现,equals并且hashCode您还应该能够通过简单地使用indexOf方法来检索当前所选对象的索引List(数据表中项的排序对于项中的项的排序是非常可靠的支持清单).这让你可以选择:

 public void onRowEdit(RowEditEvent event) {

     Label theLabel = (Label)event.getObject(); //I'm assuming the item is of type Label
     int theIndex = labelslist.indexOf(theLabel);

 }
Run Code Online (Sandbox Code Playgroud)

当然,替代方案并不是特别有效(列表需要通过每个项目进行比较),但它非常简单