Ваадин 11: освежить все (снова)

Вот хорошая тема о DataProvider.refreshAll() в Vaadin 8.5.1, но, похоже, в Vaadin 11 это не работает.

Я использовал это стартовое приложение, чтобы поиграть. Он отображает некоторые воображаемые данные продукта в сетке.

Сначала я добавил команду обновления в SampleCrudView:

public HorizontalLayout createTopBar() {
    ...
    HorizontalLayout topLayout = new HorizontalLayout();
    Button btn = new Button("refresh");
    btn.addClickListener(event -> dataProvider.refreshAll());
    topLayout.add(btn);
    ...
    return topLayout;
}

Люди из vaadin переопределяют getId() в своем ProductDataProvider следующим образом, чтобы использовать его в качестве идентификатора объекта:

@Override
public Integer getId(Product product) {
    Objects.requireNonNull(product,
            "Cannot provide an id for a null product.");

    return product.getId();
}

Этот ProductDataProvider расширяет ListDataProvider, который инициализируется при запуске данными из MockDataService, так что мы всегда имеем дело с одними и теми же объектами. Я изменил это:

public class MockDataService extends DataService {
...
@Override
public synchronized List<Product> getAllProducts() {
    //added ->
    MockDataGenerator.resetProductCounter(); //this one sets nextProductId = 1
    products = MockDataGenerator.createProducts(categories);
    products.stream().forEach(p -> System.out.println(p.getId() + ", " + p.getProductName()));
    //<- added
    return products;
}

Так что теперь вы будете получать новые экземпляры Product в одном и том же диапазоне идентификаторов каждый раз, когда вызываете getAllProducts():

  public class ProductDataProvider extends ListDataProvider<Product> {
 ...

 @Override
 public Stream<Product> fetch(Query<Product, SerializablePredicate<Product>> query) {
     //added ->
    this.getItems().clear();
    this.getItems().addAll(DataService.get().getAllProducts());
     //<- added
     return super.fetch(query); 
 }   

Итак, дело в том, что это не работает - данные в сетке остаются теми же после нажатия кнопки "обновить".

Какие-либо предложения?

С Уважением,

m_OO_m

1 ответ

Решение

Это вызвано ошибкой, которая была исправлена пару дней назад. Исправление будет включено в следующую версию обслуживания.

Другие вопросы по тегам