我有一个vaadin7应用程序和一个实体类的jpa容器。我有一个listselect控件,我用它来过滤那个容器
private ListSelect generateBrokerSelects() {
ListSelect broker_ListSelect = new ListSelect("Broker:");
JPAContainer<ReservationsBroker> containerBroker = JPAContainerFactory.makeReadOnly(ReservationsBroker.class, em);
containerBroker.sort(new Object[]{"name"}, new boolean[]{true});
broker_ListSelect.setContainerDataSource(containerBroker);
broker_ListSelect.setMultiSelect(true);
broker_ListSelect.setRows(4);
broker_ListSelect.setItemCaptionPropertyId("name");
return broker_ListSelect;
}
我想根据这个listselect控件上选择的值过滤jpa容器。
public List<Container.Filter> getFilters() {
List<Container.Filter> filters = new LinkedList<>();
Container.Filter filter;
Set brokerList = (Set) broker_ListSelect.getValue();
if (brokerList.size() > 0) {
for (Object brokerId : brokerList) {
filter = new Compare.Equal("brokerId.id", brokerId);
filters.add(filter);
}
return filters;
}
private void applyFilters() {
container.removeAllContainerFilters();
for (Container.Filter filter : getFilters()) {
container.addContainerFilter(filter);
}
}
上面代码的问题是,它有效地向容器添加了“and”过滤器,所以只剩下listselect控件的最后一个值。
我需要的是创建一个或筛选器,其中包含每个选定值的compare.equal
new Or(new Compare.Equal("brokerId.id", id1),new Compare.Equal("brokerId.id", id2),...)
当我迭代listselect控件的选定值时,是否有方法创建或筛选器并添加到该筛选器?
1条答案
按热度按时间wn9m85ua1#
Or
筛选器构造函数可以将筛选器数组作为参数,即可以执行以下操作: