0

我使用vaadin-spring。我创建了public abstract class AbstractBasicVerticalLayoutWithMenu extends HorizontalLayout implements View两个普通类来扩展它。在抽象类 I @AutowireMenu 组件中定义:

@UIScope @SpringComponent public class Menu extends CssLayout

两个类都有注释

@UIScope @SpringView

我在其中一个视图中有一个非常奇怪的问题,即我的菜单组件没有显示。

我做了一些挖掘并添加了日志记录。上

@Override public void enter(ViewChangeEvent event)

方法我添加了日志记录并尝试了很多方法,我发现当我执行 this.getComponentIndex(menu)错误的视图组件时索引为-1!

有趣的是,如果我从导航器中删除正确显示的视图(我这样做了:),getNavigator().addView(FirstTesterView.VIEW_NAME, firstTesterView);那么这个不正确的视图就会恢复正确。

我不知道为什么,但看起来只有扩展 acstract 的实例化类中的第一个获得 @Autowired 组件,而不是下一个。

我做错了什么?

4

1 回答 1

1

索引 -1 表示在子项中未找到该组件。

现在,如果您的组件是singleton,这是 spring bean 的默认范围,那么您总是会得到相同的实例。此外,Vaadin 组件在任何给定时间只能有一个父IllegalStateException组件,因此您可能在日志中遗漏了一些。

要解决此问题,您可以将菜单的范围设置为原型,以便每次都获得一个新实例。

于 2017-05-18T06:42:41.370 回答