Метод addFilter (SerializablePredicate) в типе InMemoryDataProvider не применим для аргументов ((des c) -> {}) - PullRequest
1 голос
/ 17 февраля 2020

Я играю с Ваадином и сейчас пытаюсь добавить фильтр к Grid, который получает данные через JPA и MySQL БД. Это должно быть очень просто, и я строго следую приведенным примерам здесь . Кажется, все идет хорошо, пока я не получу одноименное сообщение об ошибке.

Вот так я настроил передачу данных класса.

    @Autowired
    CoreRepository crp;     
    @Id("descriptionFilter")
    private TextField descriptionFilter;
    List<db> list = crp.findAll();
    ListDataProvider<db> ldp = DataProvider.ofCollection(list);
    grid.setDataProvider(ldp);

И фильтрация:

    /* Filtration */
    descriptionFilter.addValueChangeListener( e->
    {
        Notification.show(e.getValue());

        ldp.addFilter(desc -> 
        {
            StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue()); //<< I get the error here
        });
    });     
    descriptionFilter.setValueChangeMode(ValueChangeMode.EAGER);

Однако я получаю эту ошибку и не понять, как это происходит

Метод addFilter (SerializablePredicate) в типе InMemoryDataProvider не применим для аргументов ((des c) -> {})

Что я мог делать не так?

1 Ответ

4 голосов
/ 17 февраля 2020

Это должно быть SerializablePredicate, поэтому он должен возвращать логическое значение:

ldp.addFilter(desc -> 
{
    return StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue());
})

или даже проще:

ldp.addFilter(desc -> StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue()));
...