From: Anna Koskinen Date: Fri, 28 Jun 2013 13:47:10 +0000 (+0300) Subject: Ensure table's cells aren't refreshed if table is detached. (#9138) X-Git-Tag: 7.1.1~22 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6c4da294423a22f81840d9c0d807aca4ca9b8676;p=vaadin-framework.git Ensure table's cells aren't refreshed if table is detached. (#9138) Change-Id: I026cd70e9e518fa320f6ec3011194359385a3a4a --- diff --git a/server/src/com/vaadin/ui/Table.java b/server/src/com/vaadin/ui/Table.java index 0fb6197c3e..5dbf927658 100644 --- a/server/src/com/vaadin/ui/Table.java +++ b/server/src/com/vaadin/ui/Table.java @@ -1615,7 +1615,7 @@ public class Table extends AbstractSelect implements Action.Container, * guaranteed to be recreated. */ protected void refreshRenderedCells() { - if (getParent() == null) { + if (!isAttached()) { return; } diff --git a/uitest/src/com/vaadin/tests/components/table/RefreshRenderedCellsOnlyIfAttached.html b/uitest/src/com/vaadin/tests/components/table/RefreshRenderedCellsOnlyIfAttached.html new file mode 100644 index 0000000000..e6d4d69f81 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/RefreshRenderedCellsOnlyIfAttached.html @@ -0,0 +1,41 @@ + + + + + + +RefreshRenderedCellsOnlyIfAttachedTest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RefreshRenderedCellsOnlyIfAttachedTest
open/run/RefreshRenderedCellsOnlyIfAttached?restartApplication
assertTextvaadin=runRefreshRenderedCellsOnlyIfAttached::PID_Slabeldefault
clickvaadin=runRefreshRenderedCellsOnlyIfAttached::PID_Sbutton/domChild[0]/domChild[0]
assertNotTextvaadin=runRefreshRenderedCellsOnlyIfAttached::PID_Slabeldefault
assertTextvaadin=runRefreshRenderedCellsOnlyIfAttached::PID_Slabeloriginal: false, now: false
+ + \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/components/table/RefreshRenderedCellsOnlyIfAttached.java b/uitest/src/com/vaadin/tests/components/table/RefreshRenderedCellsOnlyIfAttached.java new file mode 100644 index 0000000000..3e233c69c2 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/RefreshRenderedCellsOnlyIfAttached.java @@ -0,0 +1,121 @@ +/* + * Copyright 2000-2013 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.tests.components.table; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; +import com.vaadin.ui.VerticalLayout; + +/** + * There shouldn't be any attempts to refresh table's cells if the table isn't + * attached. + * + * @since + * @author Vaadin Ltd + */ +public class RefreshRenderedCellsOnlyIfAttached extends AbstractTestUI { + + VerticalLayout layout; + boolean check; + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server. + * VaadinRequest) + */ + @Override + protected void setup(VaadinRequest request) { + getLayout().setMargin(true); + check = false; + layout = new VerticalLayout(); + final Label l1 = new Label("default"); + l1.setId("label"); + final Label l2 = new Label("should be: default"); + final Table t = new Table() { + /* + * (non-Javadoc) + * + * @see com.vaadin.ui.Table#refreshRenderedCells() + */ + @Override + protected void refreshRenderedCells() { + boolean original = isRowCacheInvalidated(); + super.refreshRenderedCells(); + if (check) { + l1.setValue("original: " + original + ", now: " + + isRowCacheInvalidated()); + l2.setValue("should be: false & false"); + } + } + }; + t.addContainerProperty("text", String.class, ""); + t.addItem(new Object[] { "Foo" }, "foo"); + t.setId("table"); + layout.addComponent(t); + addComponent(l1); + addComponent(l2); + addComponent(layout); + + Button b = new Button("Detach table", new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + check = true; + removeTableParent(); + // call refreshRenderedCells + t.setColumnCollapsingAllowed(true); + } + }); + b.setId("button"); + addComponent(b); + } + + /** + * Remove Table's parent component. + * + * @since + */ + protected void removeTableParent() { + removeComponent(layout); + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTestDescription() + */ + @Override + protected String getTestDescription() { + return "There shouldn't be any attempts to refresh table's cells if the table isn't attached."; + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber() + */ + @Override + protected Integer getTicketNumber() { + return 9138; + } + +}