会话未锁定时无法从父级中删除

时间:2016-04-14 13:48:24

标签: spring vaadin vaadin7

当我用2个会话测试我的应用程序时,在一个浏览器中一切正常,在另一个浏览器中我得到例外。

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreserveOnRefresh
@SpringComponent
public class TestUI extends UI {

    @Autowired
    MainLayout content;

    @Autowired
    DetailView detailView;

    @Override
    protected void init(VaadinRequest request) {
        VaadinSession.setCurrent(VaadinSession.getCurrent());
        Navigator navigator = new Navigator(this, detailView);
        navigator.addView("tests", TestView.class);
        setContent(content);
    }
}

enter image description here

  

java.lang.IllegalStateException:当会话未锁定时,无法从父级中删除。此外,还有另一个锁定会话,表示该组件可能即将从一个会话移动到另一个会话。       在com.vaadin.ui.AbstractSingleComponentContainer.removeFromParent(AbstractSingleComponentContainer.java:175)       在com.vaadin.ui.AbstractSingleComponentContainer.setContent(AbstractSingleComponentContainer.java:148)       在com.vaadin.ui.UI.setContent(UI.java:1312)

1 个答案:

答案 0 :(得分:5)

将Vaadin组件定义为Spring托管bean时,必须始终为这些bean定义非单一范围。例如:

@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class MainLayout extends VerticalLayout {

这是因为Vaadin组件只能有一个父组件。其他可能的范围是@UIScope@ViewScope