Java 如何获取筛选后的extendedDataTable的选定行?
在我的应用程序(RichFaces 4.1)中,我有一个extendedDataTable,在我的支持bean中,我需要跟踪所选的行。我通过以下代码实现这一点: JSF: 只要不过滤该表,这就可以正常工作。我使用标准的RichFaces方法过滤表格:Java 如何获取筛选后的extendedDataTable的选定行?,java,jsf,datatable,richfaces,Java,Jsf,Datatable,Richfaces,在我的应用程序(RichFaces 4.1)中,我有一个extendedDataTable,在我的支持bean中,我需要跟踪所选的行。我通过以下代码实现这一点: JSF: 只要不过滤该表,这就可以正常工作。我使用标准的RichFaces方法过滤表格: 当对表进行筛选并选择第一行时,我会在backingbean中获取未筛选表的第一行的rowKey。在筛选表时,如何获取所选行的行数据 我认为我的代码的工作方式与中的相同。也许您忽略了一些东西,因为我尝试了它,它工作了 我复制了selectabl
当对表进行筛选并选择第一行时,我会在backingbean中获取未筛选表的第一行的rowKey。在筛选表时,如何获取所选行的行数据
我认为我的代码的工作方式与中的相同。也许您忽略了一些东西,因为我尝试了它,它工作了 我复制了
selectableTable
的源代码,并从filterTable
用法示例:要获取所选项目/项目数据,只需对所选项目列表使用get方法
源代码(xhtml):
Richfaces欢迎页面
托管Bean:
public class ExTableSelect {
private String selectionMode = "multiple";
private Collection<Object> selection;
private List<InventoryItem> inventoryItems;
private List<InventoryItem> selectionItems = new ArrayList<InventoryItem>();
private String vendorFilter;
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 Filter<?> getFilterVendor() {
return new Filter<InventoryItem>() {
public boolean accept(InventoryItem t) {
String vendor = getVendorFilter();
if (vendor == null || vendor.length() == 0 || vendor.equals(t.getVendor())) {
return true;
}
return false;
}
};
}
@PostConstruct
public void addInventory(){
InventoryItem i = new InventoryItem();
i.setVendor("A");
InventoryItem i2 = new InventoryItem();
i2.setVendor("AB");
InventoryItem i3 = new InventoryItem();
i3.setVendor("AC");
InventoryItem i4= new InventoryItem();
i4.setVendor("E");
InventoryItem i5 = new InventoryItem();
i5.setVendor("F");
InventoryItem i6 = new InventoryItem();
i6.setVendor("G");
InventoryItem i7 = new InventoryItem();
i7.setVendor("H");
InventoryItem i8 = new InventoryItem();
i8.setVendor("I");
InventoryItem i9 = new InventoryItem();
i9.setVendor("J");
inventoryItems= new ArrayList<InventoryItem>();
inventoryItems.add(i);
inventoryItems.add(i2);
inventoryItems.add(i3);
inventoryItems.add(i4);
inventoryItems.add(i5);
inventoryItems.add(i6);
inventoryItems.add(i7);
inventoryItems.add(i8);
inventoryItems.add(i9);
}
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;
}
public void setVendorFilter(String vendorFilter) {
this.vendorFilter = vendorFilter;
}
public String getVendorFilter() {
return vendorFilter;
}
}
公共类ExTableSelect{
私有字符串selectionMode=“多个”;
私人收藏选择;
私人清单清单项目;
private List selectionItems=new ArrayList();
私有字符串过滤器;
public void selectionListener(AjaxBehaviorEvent事件){
UIExtendedDataTable=(UIExtendedDataTable)事件。getComponent();
Object originalKey=dataTable.getRowKey();
selectionItems.clear();
用于(对象选择键:选择){
dataTable.setRowKey(selectionKey);
if(dataTable.isRowAvailable()){
添加((InventoryItem)dataTable.getRowData());
}
}
dataTable.setRowKey(originalKey);
}
公共筛选器getFilterVendor(){
返回新筛选器(){
公共布尔接受(InventoryItem t){
字符串vendor=getVendorFilter();
如果(vendor==null | | vendor.length()==0 | | vendor.equals(t.getVendor())){
返回true;
}
返回false;
}
};
}
@施工后
公共无效附加库(){
InventoryItem i=新的InventoryItem();
i、 卖方(“A”);
InventoryItem i2=新的InventoryItem();
i2.卖方(“AB”);
InventoryItem i3=新的InventoryItem();
i3.卖方(“AC”);
InventoryItem i4=新的InventoryItem();
i4.卖方(“E”);
InventoryItem i5=新的InventoryItem();
i5.卖方(“F”);
InventoryItem i6=新的InventoryItem();
i6.卖方(“G”);
InventoryItem i7=新的InventoryItem();
i7.卖方(“H”);
InventoryItem i8=新的InventoryItem();
i8.卖方(“我”);
InventoryItem i9=新的InventoryItem();
i9.卖方(“J”);
inventoryItems=新的ArrayList();
增加(i)项;
增加(i2);
增加(i3);
增加(i4);
增加(i5);
增加(i6);
增加(i7);
增加(i8);
增加(i9);
}
公共集合getSelection(){
返回选择;
}
公开选举(集合选择){
this.selection=选择;
}
公共列表getInventoryItems(){
归还库存物品;
}
公共无效集合inventoryItems(列出inventoryItems){
this.inventoryItems=inventoryItems;
}
公共资源清册项getSelectionItem(){
if(selectionItems==null | | selectionItems.isEmpty()){
返回null;
}
返回selectionItems.get(0);
}
公共列表getSelectionItems(){
返回所选项目;
}
公共作废设置选择项(列表选择项){
this.selectionItems=selectionItems;
}
公共字符串getSelectionMode(){
返回选择模式;
}
公共无效设置选择模式(字符串选择模式){
this.selectionMode=selectionMode;
}
公共void setVendorFilter(字符串vendorFilter){
this.vendorFilter=vendorFilter;
}
公共字符串getVendorFilter(){
返回过滤器;
}
}
我可以通过处理过滤bean会话来解决我的问题。我也不再将当前选定的行绑定到我的支持bean。我使用以下方法获取所选行:
public void表选择(AjaxBehaviorEvent事件){
UIExtendedDataTable=(UIExtendedDataTable)事件。getComponent();
对于(对象selectionKey:dataTable.getSelection()){
也可以使用来获得正确的行索引
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);
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:rich="http://richfaces.org/rich"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Richfaces Welcome Page</title>
</h:head>
<h:body>
<h:panelGrid columns="2">
<h:form>
<fieldset style="margin-bottom: 10px;">
<legend>
<h:outputText value="Selection Mode " />
</legend>
<h:selectOneRadio value="#{exTableSelect.selectionMode}">
<f:selectItem itemLabel="Single" itemValue="single" />
<f:selectItem itemLabel="Multiple" itemValue="multiple" />
<f:selectItem itemLabel="Multiple Keyboard-free" itemValue="multipleKeyboardFree" />
<a4j:ajax render="table, res" />
</h:selectOneRadio>
</fieldset>
<rich:extendedDataTable value="#{exTableSelect.inventoryItems}" var="car"
selection="#{exTableSelect.selection}" id="table" style="height:300px; width:500px;"
selectionMode="#{exTableSelect.selectionMode}">
<a4j:ajax execute="@form" event="selectionchange" listener="#{exTableSelect.selectionListener}"
render=":res" />
<f:facet name="header">
<h:outputText value="Cars marketplace" />
</f:facet>
<rich:column filterValue="#{exTableSelect.vendorFilter}"
filterExpression="#{fn:containsIgnoreCase(car.vendor, exTableSelect.vendorFilter)}">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Vendor " />
<h:inputText value="#{exTableSelect.vendorFilter}">
<a4j:ajax render="table" execute="@this" event="change" />
</h:inputText>
</h:panelGroup>
</f:facet>
<h:outputText value="#{car.vendor}" />
</rich:column>
</rich:extendedDataTable>
</h:form>
<a4j:outputPanel id="res">
<rich:panel header="Selected Rows:" rendered="#{not empty exTableSelect.selectionItems}">
<rich:list type="unordered" value="#{exTableSelect.selectionItems}" var="sel">
<h:outputText value="#{sel.vendor} - #{sel.model} - #{sel.price}" />
</rich:list>
</rich:panel>
</a4j:outputPanel>
</h:panelGrid>
</h:body>
</html>
public class ExTableSelect {
private String selectionMode = "multiple";
private Collection<Object> selection;
private List<InventoryItem> inventoryItems;
private List<InventoryItem> selectionItems = new ArrayList<InventoryItem>();
private String vendorFilter;
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 Filter<?> getFilterVendor() {
return new Filter<InventoryItem>() {
public boolean accept(InventoryItem t) {
String vendor = getVendorFilter();
if (vendor == null || vendor.length() == 0 || vendor.equals(t.getVendor())) {
return true;
}
return false;
}
};
}
@PostConstruct
public void addInventory(){
InventoryItem i = new InventoryItem();
i.setVendor("A");
InventoryItem i2 = new InventoryItem();
i2.setVendor("AB");
InventoryItem i3 = new InventoryItem();
i3.setVendor("AC");
InventoryItem i4= new InventoryItem();
i4.setVendor("E");
InventoryItem i5 = new InventoryItem();
i5.setVendor("F");
InventoryItem i6 = new InventoryItem();
i6.setVendor("G");
InventoryItem i7 = new InventoryItem();
i7.setVendor("H");
InventoryItem i8 = new InventoryItem();
i8.setVendor("I");
InventoryItem i9 = new InventoryItem();
i9.setVendor("J");
inventoryItems= new ArrayList<InventoryItem>();
inventoryItems.add(i);
inventoryItems.add(i2);
inventoryItems.add(i3);
inventoryItems.add(i4);
inventoryItems.add(i5);
inventoryItems.add(i6);
inventoryItems.add(i7);
inventoryItems.add(i8);
inventoryItems.add(i9);
}
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;
}
public void setVendorFilter(String vendorFilter) {
this.vendorFilter = vendorFilter;
}
public String getVendorFilter() {
return vendorFilter;
}
}