【问题标题】:Get rowIndex via RowEditEvent按行编辑事件获取行索引
【发布时间】:2015-01-15 15:36:42
【问题描述】:

我有一个简单的问题,但我找不到正确的答案。

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

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

还有一个方法

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

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

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

【问题讨论】:

  • 我想从将要更新的行中获取一个单元格的 ID,该行是动态创建的。例如 (tableForm:labelsList:1:myId) 其中 1 是 rowIndex
  • 你可以使用&lt;f:setPropertyActionListener&gt;在你的bean中设置rowIndex值,你试过吗?
  • 是的,我已经尝试使用 rowEditor 但我收到类似“ Parent is not of type ActionSource, type is: org.primefaces.component.roweditor .RowEditor@38523852 "
  • 你把 放进去了吗?
  • 是的,但是没有调用属性的设置器,我不知道为什么。我已经剪断了代码: ajax> 其中 currentRow 是我的 bean 的属性

标签: jsf primefaces datatable


【解决方案1】:

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

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

或者,如果您的列表项已正确实现equalshashCode,您还应该能够通过简单地使用List 上的indexOf 方法来检索当前选定对象的索引(项目的排序在数据表中对于后备列表中项目的排序非常可靠)。这让您可以选择:

 public void onRowEdit(RowEditEvent event) {

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

 }

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

【讨论】:

  • 我已经这样做了,你完全正确。谢谢!附:我可以直接从事件调用 getSource() 方法。我不需要 evt 变量
  • 哇,我不知道!不错!!
  • 不错。很好的答案。恭喜。附:你非常接近。我的对象,如果 LabelDto 类型 :)
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 2011-09-24
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多