通过 RowEditEvent 获取 rowIndex
Get rowIndex via RowEditEvent
我有一个简单的问题,但找不到正确的答案。
我渲染了一个非常复杂的数据表:
<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。
我还尝试将行的索引作为属性发送,但没有成功。有任何想法吗?谢谢!
您的数据表已经通过您使用 rowKey="#{label.cod}"
设置的属性携带了活动行信息。这给您留下了许多选择,其中最灵活的是 DataTable
class 上的 getRowIndex()
变量,如下所示:
public void onRowEdit(RowEditEvent event) {
AjaxBehaviorEvent evt = (AjaxBehaviorEvent)event;
(DataTable) table = evt.getSource();
int activeRow = table.getRowIndex(); //do whatever you want with it
}
或者,如果您的列表项已正确实现 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);
}
诚然,替代方案不是特别有效(列表需要 运行 通过每个项目进行比较),但它非常简单
我有一个简单的问题,但找不到正确的答案。
我渲染了一个非常复杂的数据表:
<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。
我还尝试将行的索引作为属性发送,但没有成功。有任何想法吗?谢谢!
您的数据表已经通过您使用 rowKey="#{label.cod}"
设置的属性携带了活动行信息。这给您留下了许多选择,其中最灵活的是 DataTable
class 上的 getRowIndex()
变量,如下所示:
public void onRowEdit(RowEditEvent event) {
AjaxBehaviorEvent evt = (AjaxBehaviorEvent)event;
(DataTable) table = evt.getSource();
int activeRow = table.getRowIndex(); //do whatever you want with it
}
或者,如果您的列表项已正确实现 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);
}
诚然,替代方案不是特别有效(列表需要 运行 通过每个项目进行比较),但它非常简单