Как передать фильтры поставщику данных Wicket на основе выбора пользователя

Я создал DataView, поддерживаемый поставщиком данных. Я пытаюсь выяснить, как мы предполагаем, что поставщик данных фильтрует данные, поступающие из базы данных, на основе фильтра, установленного пользователем. Пользователь может выбрать множество параметров, которые затем будут использоваться для фильтрации данных в базе данных, однако как это обычно делается, когда представление данных поддерживается поставщиком данных? Должен ли я передать фильтр поставщику данных? Должен ли я сначала выполнить запрос, сохранить его в ArrayList, а затем передать список поставщику данных?

В примерах калитки есть поставщик контактных данных, но он не показывает, как он будет фильтровать данные на основе ввода пользователей. Любые идеи?

Дайте мне знать, если мне нужно уточнить вопрос.


person user2947091    schedule 22.11.2015    source источник


Ответы (1)


Обычно у меня есть какой-то объект критериев:

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);
  }

  ...
}
person svenmeier    schedule 23.11.2015