java - 如何获取过滤后的extendedDataTable的选中行?

标签 java jsf datatable richfaces

在我的应用程序 (RichFaces 4.1) 中,我有一个扩展数据表,在我的支持 bean 中,我需要跟踪选定的行。我使用以下代码实现了这一点:

JSF:

<rich:extendedDataTable id="freie"
    selectionMode="multipleKeyboardFree"
    selection="#{myBean.tableSelection}"
    ...
<a4j:ajax execute="@this" event="selectionchange" 
          listener="#{myBean.tableSelection}"
          render="indicatorPanel" />

java :

    UIExtendedDataTable dataTable= (UIExtendedDataTable) event.getComponent();
    Object originalKey= dataTable.getRowKey();
    _tableSelectedEntries.clear();
    for (Object selectionKey: _tableSelection) {
        dataTable.setRowKey(selectionKey);
        if (dataTable.isRowAvailable()) {
            _tableSelectedEntries.add((Entry) dataTable.getRowData());
        }
    }
    dataTable.setRowKey(originalKey);

只要表格未被过滤,这就可以正常工作。我使用标准的 RichFaces 方式来过滤表格:

<rich:column sortBy="#{mitarbeiter.vorname}"
 filterValue="#{mitarbeiterFilterBean.firstNameFilter}"
 filterExpression="#{fn:containsIgnoreCase(mitarbeiter.vorname, mitarbeiterFilterBean.firstNameFilter)}">

当过滤表并选择第一行时,我在支持 bean 中获得未过滤表第一行的 rowKey。表格过滤后如何获取选中行的rowData?

我认为我的代码与 showcase 中的代码工作方式相同.

最佳答案

我可以通过使过滤器 bean 成为 SessionScoped 来解决我的问题。我也不再将当前选定的行绑定(bind)到我的支持 bean。我使用以下方法获取选定的行:

public void tableSelection (AjaxBehaviorEvent event) {
    UIExtendedDataTable dataTable= (UIExtendedDataTable) event.getComponent();
    for (Object selectionKey: dataTable.getSelection()) {

也可以使用 rowKeyVar 来实现获取正确的行索引。

关于java - 如何获取过滤后的extendedDataTable的选中行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623329/

相关文章:

java - JSF网页包含

templates - 了解jsf ui的用途 :composition

java - 如何为 servlet 和对象数组设置数据表?

javascript - Jquery Datatables数据通过Ajax将数据追加到表中

javascript - 数据表rowCallback函数初始化后

java - Java代码大O时间复杂度计算工具?

java - 数组的选择排序方法

java - 我无法在 Tomchat 7.0.90 中运行 servlet

java - 无法在 JavaFX 2.0 和 8.0 中加载 WebView

ajax - JSF - Ajax 调用 - 这段代码有什么问题?