如何根据用户选择将筛选器传递给Wicket数据提供程序

如何根据用户选择将筛选器传递给Wicket数据提供程序,wicket,dataprovider,Wicket,Dataprovider,我已经创建了一个由数据提供程序支持的数据视图。我试图找出我们应该如何让数据提供者根据用户设置的过滤器过滤来自数据库的数据。用户可以选择许多选项,然后使用这些选项来过滤数据库中的数据,但是,当数据视图由数据提供程序支持时,通常是如何做到这一点的?是否将筛选器传递给数据提供程序?我是否应该首先运行查询,将其存储在ArrayList中,然后将列表传递给数据提供程序 wicket示例有一个联系人数据提供程序,但它没有显示如何根据用户输入过滤数据。有什么想法吗 如果我需要澄清问题,请告诉我 通常我有一些标

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

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


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

通常我有一些标准对象:

FooCriteria {
  String bar;
  boolean baz;
}
。。。在匹配面板中配置的:

FooCriteriaPanel(String id, IModel<FooCriteria> criteria) {
  super(new CompoundPropertyModel<>(criteria);
  add(new TextField("bar"));
  add(new Checkbox("baz"));
}
FooCriteriaPanel(字符串id、IModel标准){
超级(新的复合物属性模型(标准);
添加(新文本字段(“栏”);
添加(新复选框(“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);
  }

  ...
}
FooResultsPanel(字符串id、IModel标准){
超级(id);
添加(新数据表(“表”,新FooProvider(标准));
}
私有类FooProvider实现IDataProvider{
私有IModel标准;
公共FoodProvider(IModel标准){
本标准=标准;
}
公共图书馆{
this.criteria.detach();
}
公共迭代器迭代器(长优先,长计数){
service.getFoos(criteria.getObject(),第一个,count);
}
...
}

通常我有一些标准对象:

FooCriteria {
  String bar;
  boolean baz;
}
…在匹配的面板中配置:

FooCriteriaPanel(String id, IModel<FooCriteria> criteria) {
  super(new CompoundPropertyModel<>(criteria);
  add(new TextField("bar"));
  add(new Checkbox("baz"));
}
FooCriteriaPanel(字符串id、IModel标准){
超级(新的复合物属性模型(标准);
添加(新文本字段(“栏”);
添加(新复选框(“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);
  }

  ...
}
FooResultsPanel(字符串id、IModel标准){
超级(id);
添加(新数据表(“表”,新FooProvider(标准));
}
私有类FooProvider实现IDataProvider{
私有IModel标准;
公共FoodProvider(IModel标准){
本标准=标准;
}
公共图书馆{
this.criteria.detach();
}
公共迭代器迭代器(长优先,长计数){
service.getFoos(criteria.getObject(),第一个,count);
}
...
}