Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
When I use setEnabled method to ComponentContainer it updates state of cont
- Vaadin version
I use Vaadin version 7.1.13, but this problem is still reproduced in higher versions. For example problem also reproduced in Vaadin version 8.0.5
- Description of the bug
I suppose that the explanation in the code example would be enough to understand the problem.
I met this case in real situation when I tried to extend CustomComponent for my needs and only one solution I found is to use UI.getCurrent().push(); into implementation of CustomComponent. I don't really like this idea and I think there could be an other way to solve this problem correctly.
- Reproducible example
(Just create component using createReproducibleExample() method and click to Update table content button to see explanation
private static class Table extends VerticalLayout {
private final List<Component> headers;
private Table(final Component... headers) {
this.headers = Arrays.asList(headers);
}
private void updateContent(final Component... rows) {
removeAllComponents();
if (false) {
//In this case all works fine
for (final Component component : headers) {
addComponent(component);
}
} else {
//In case with intermediate container logic works not as it is expected
//UI.getCurrent().push(); //Uncommenting this code would solve a problem
final HorizontalLayout tableHead = new HorizontalLayout();
for (final Component component : headers) {
tableHead.addComponent(component);
}
addComponent(tableHead);
}
final VerticalLayout tableBody = new VerticalLayout();
for (final Component component : rows) {
tableBody.addComponent(component);
}
addComponent(tableBody);
}
}
private final Table table = new Table(new Label("Header 1"), new Label("Header 2"));
private Component createReproducibleExample() {
final AtomicInteger counter = new AtomicInteger(1);
return new VerticalLayout(
new Button("Update table content", event -> {
table.setEnabled(false);
UI.getCurrent().push();
//.... some actions
try { Thread.sleep(2000); } catch (InterruptedException ignore) {}
table.updateContent(new Label("Content number: " + counter.incrementAndGet()));
//.... some actions
table.setEnabled(true);
UI.getCurrent().push();
}),
table
);
}