2014-06-13 4 views
3

Richfaces 4 - extendedDataTable inbuilt 필터링 - selectionListner()는 필터링이 적용된 후 업데이트 된 인덱스를 가져올 수 없습니다. Richfaces 3에는 richfaces 4에없는 DataModel 클래스가 있습니다. RichList 4에서 테이블 필터링을 구현하는 가장 좋은 방법은 selectionListner()도 올바르게 작동하도록하는 것입니다.Richfaces 4 - extendedDataTable 내장 된 필터링 - 필터링 적용 후 selectionListner가 업데이트 된 인덱스를 가져올 수 없습니다.

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; 
} 
} 
+0

도와 드릴 수있는 사람이 있습니까? – user3680182

답변

2

나는이 문제 때문에 @ViewScoped입니다 생각합니다.

@SessionScoped을 사용해보세요. 문제를 해결해야합니다.

관련 문제