Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取筛选后的extendedDataTable的选定行?_Java_Jsf_Datatable_Richfaces - Fatal编程技术网

Java 如何获取筛选后的extendedDataTable的选定行?

Java 如何获取筛选后的extendedDataTable的选定行?,java,jsf,datatable,richfaces,Java,Jsf,Datatable,Richfaces,在我的应用程序(RichFaces 4.1)中,我有一个extendedDataTable,在我的支持bean中,我需要跟踪所选的行。我通过以下代码实现这一点: JSF: 只要不过滤该表,这就可以正常工作。我使用标准的RichFaces方法过滤表格: 当对表进行筛选并选择第一行时,我会在backingbean中获取未筛选表的第一行的rowKey。在筛选表时,如何获取所选行的行数据 我认为我的代码的工作方式与中的相同。也许您忽略了一些东西,因为我尝试了它,它工作了 我复制了selectabl

在我的应用程序(RichFaces 4.1)中,我有一个extendedDataTable,在我的支持bean中,我需要跟踪所选的行。我通过以下代码实现这一点:

JSF:

只要不过滤该表,这就可以正常工作。我使用标准的RichFaces方法过滤表格:


当对表进行筛选并选择第一行时,我会在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;
    }
}