我正在寻找一个解决方案,我想用多个值过滤我的容器 使用逻辑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 ......),怎么做呢?