如何根据用户选择将过滤器传递给Wicket Data Provider

时间:2015-11-22 20:42:32

标签: wicket dataprovider

我创建了一个由Data提供程序支持的DataView。我试图找出我们如何让数据提供程序根据用户设置的过滤器过滤来自数据库的数据。用户可以选择许多选项,然后用于过滤数据库中的数据,但是,当数据视图由数据提供者支持时,通常如何进行?我是否将过滤器传递给数据提供者?我应该先运行查询,将其存储在ArrayList中,然后将列表传递给数据提供者吗?

wicket示例有一个联系人数据提供程序,但它没有显示它如何根据用户输入过滤数据。有任何想法吗?

如果我需要澄清这个问题,请告诉我。

1 个答案:

答案 0 :(得分:2)

通常我有某种标准对象:

FooCriteria {
  String bar;
  boolean baz;
}

...在匹配的面板中配置:

FooCriteriaPanel(String id, IModel<FooCriteria> criteria) {
  super(new CompoundPropertyModel<>(criteria);
  add(new TextField("bar"));
  add(new Checkbox("baz"));
}

...并传递给结果面板:

FooResultsPanel(String id, IModel<FooCriteria> criteria) {
  super(id);

  add(new DataTable("table", new FooProvider(criteria)));
}

private class FooProvider implements IDataProvider {
  private IModel<FooCriteria> criteria;

  public FooProvider(IModel<FooCriteria> criteria) {
    this.criteria = criteria;
  }

  public void detach() {
    this.criteria.detach();
  }

  public Iterator<Foo> iterator(long first, long count) {
    service.getFoos(criteria.getObject(), first, count);
  }

  ...
}