我使用vaadin-spring。我创建了public abstract class AbstractBasicVerticalLayoutWithMenu extends HorizontalLayout implements View
,我有两个扩展它的普通类。在抽象类我@Autowire
菜单组件定义:autowired vaadin组件获取索引-1
@UIScope @SpringComponent public class Menu extends CssLayout
两个类都注释
@UIScope @SpringView
我有很奇怪的问题在一个视图中,没有显示我的菜单组件。
我做了一些挖掘和添加日志。在
@Override public void enter(ViewChangeEvent event)
方法我增加测井,试了很多thigs,我发现,当我做this.getComponentIndex(menu)
是错误的观点分量索引号为-1!有趣的是,如果我从导航器中删除正确显示的视图(我这样做:getNavigator().addView(FirstTesterView.VIEW_NAME, firstTesterView);
),那么这个不正确的视图回来更正。
我不知道为什么,但它看起来像只有第一个实例化的类扩展acstract获取@Autowired组件,但不是下一个。
我该怎么做?
我怀疑你的菜单是[singleton](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-singleton)这是春天的默认范围。同时,Vaadin组件在任何时候都只能有一个父项,例如,不能在两个不同的视图中包含相同的菜单实例。所以,只需将它制作为[原型](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-prototype),以便获得每次都有新的实例。否则,请发布更多代码或者[sscce](http://sscce.org) – Morfic
你是完全正确的。请从这个评论回答我的批准! – Mateusz