当我用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);
}
}
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)
答案 0 :(得分:5)
将Vaadin组件定义为Spring托管bean时,必须始终为这些bean定义非单一范围。例如:
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class MainLayout extends VerticalLayout {
这是因为Vaadin组件只能有一个父组件。其他可能的范围是@UIScope
和@ViewScope
。