Search code examples
jsf-2richfaces

Richfaces 4 – extendedDataTable inbuilt filtering – selectionListner is not able to get the updated index after filtering is applied


Richfaces 4 – extendedDataTable inbuilt filtering – selectionListner() is not able to get the updated index after filtering is applied. In Richfaces 3 there was DataModel class which is not present in richfaces 4. Which is the best way to implement table filtering in Richfaces 4, so that the selectionListner() also works correctly.

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.event.AjaxBehaviorEvent;
import org.richfaces.component.UIExtendedDataTable;
import org.richfaces.demo.tables.model.cars.InventoryItem;

@ManagedBean
@ViewScoped
public class ExtTableSelectionBean implements Serializable {
private String selectionMode = "multiple";
private Collection<Object> selection;
@ManagedProperty(value = "#{carsBean.allInventoryItems}")
private List<InventoryItem> inventoryItems;
private List<InventoryItem> selectionItems = new ArrayList<InventoryItem>();

public void selectionListener(AjaxBehaviorEvent event) {
    UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();
    Object originalKey = dataTable.getRowKey();
    selectionItems.clear();
    for (Object selectionKey : selection) {
        dataTable.setRowKey(selectionKey);
        if (dataTable.isRowAvailable()) {
            selectionItems.add((InventoryItem) dataTable.getRowData());
        }
    }
    dataTable.setRowKey(originalKey);
}

public Collection<Object> getSelection() {
    return selection;
}

public void setSelection(Collection<Object> selection) {
    this.selection = selection;
}

public List<InventoryItem> getInventoryItems() {
    return inventoryItems;
}

public void setInventoryItems(List<InventoryItem> inventoryItems) {
    this.inventoryItems = inventoryItems;
}

public InventoryItem getSelectionItem() {
    if (selectionItems == null || selectionItems.isEmpty()) {
        return null;
    }
    return selectionItems.get(0);
}

public List<InventoryItem> getSelectionItems() {
    return selectionItems;
}

public void setSelectionItems(List<InventoryItem> selectionItems) {
    this.selectionItems = selectionItems;
}

public String getSelectionMode() {
    return selectionMode;
}

public void setSelectionMode(String selectionMode) {
    this.selectionMode = selectionMode;
}
}

Solution

  • I believe this problem is because of the @ViewScoped.

    Try using @SessionScoped and should solve your issue.