【问题标题】:JPA container OR filter - Vaadin applicationJPA 容器或过滤器 - Vaadin 应用程序
【发布时间】:2020-12-28 15:32:32
【问题描述】:

我有一个 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 的 OR 过滤器

new Or(new Compare.Equal("brokerId.id", id1),new Compare.Equal("brokerId.id", id2),...)

当我迭代 ListSelect 控件的选定值时,有没有办法创建 Or 过滤器并添加到该过滤器?

【问题讨论】:

    标签: java vaadin vaadin7 jpacontainer


    【解决方案1】:

    Or过滤器构造函数可以将过滤器数组作为参数,即您可以执行以下操作:

    Filter[] filters = ...;
    String[] ids = ...;
    for (int i=0;i<10;i++) {
        filters[i] = new Compare.Equal("brokerId.id", ids[i]);
    }
    Or or  = new Or(filters); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2011-03-27
      • 2015-10-02
      • 2011-04-07
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多