Ваадин 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 ответ
Это вызвано ошибкой, которая была исправлена пару дней назад. Исправление будет включено в следующую версию обслуживания.