vaadin 6.5.7 - 如何使用容器过滤容器中的多个值

时间:2012-07-04 20:34:57

标签: vaadin

我正在寻找一个解决方案,我想用多个值过滤我的容器 使用逻辑OR。

例如,我想过滤我的值并得到值==“A”或“B”的结果

当我只有1个值时,这段代码可以工作:

private void applyTextFilters(List<String> filters)
{
    unselectAllItems();

    IndexedContainer container = (IndexedContainer) valuesTable.getContainerDataSource();
    container.removeContainerFilters(Columns.SEARCH.id());

    for (String filter : filters) {
        container.addContainerFilter(Columns.SEARCH.id(), filter, true, false);
    }

    clinicalValuesGraph.refreshGraph(container, getLabel("clinicalvalues.graph.caption"));
    // if it is the case ...
    //toggleEmptyResultNotification();
    handleView(viewMode);
}

我错过了什么?同样,如果我的代码中有2个过滤器(“A”,“B”),则没有结果显示,但如果我通过“A”,则可以使用。

跟随我的问题......

使用6.5.7,我需要使用2个标准过滤我的容器,如“patrick”或“john”等搜索名称。

我已经检查了代码,这是我需要修改方法(受保护)的地方:

protected boolean passesFilters(Object itemId) {
    IndexedContainerItem item = new IndexedContainerItem(itemId);
    if (filters == null) {
        return true;
    }
    final Iterator<Filter> i = filters.iterator();
    while (i.hasNext()) {
        final Filter f = i.next();
        if (!f.passesFilter(item)) {
            return false;
        }
    }
    return true;
}

对此:

protected boolean passesFilters(Object itemId) {
    IndexedContainerItem item = new IndexedContainerItem(itemId);
    if (filters == null) {
        return true;
    }
    boolean previouslyPassedFilter = false;
    boolean PassesFilter = true;

    final Iterator<Filter> i = filters.iterator();
    while (i.hasNext()) {
        final Filter f = i.next();
        if (!f.passesFilter(item) && !previouslyPassedFilter) {
            passesFilter = false;
        } else {
            previouslyPassedFilter = true;
        }
    }
    return passesFilter ;
}

如果不重写所有这些类(IndexedContainer,IndexContainerItem ......),怎么做呢?

0 个答案:

没有答案