Vaadin-spring View注入:@SpringView的任何替代方案都可以从UI控制注入?

时间:2016-05-20 15:05:27

标签: java spring vaadin

我们(希望)知道vaadin-spring的registring视图的标准方式:

@SpringView(name = "")
public class ViewMain implements View {
    // ...
}

@SpringView(name = "login")
public class ViewLogin implements View {
    // ...
}

@SpringUI(path = "")
public class MainUI extends UI {

    @Autowired
    SpringViewProvider viewProvider;

    @override
    protected void init(....) {

        Navigator navigator = new Navigator(this, this);
        navigator.addProvider(viewProvider);

        ...
    }

}

现在我有多个用户界面,ViewLogin位于不同的公共组件中,我需要添加一些带有ViewLogin的用户界面。

  • 我无法将UI列表添加到@SpringView ViewLogin的注释中(它是不同的包)。
  • 我不希望ViewLogin出现在所有用户界面中。更多,我需要一些UI的不同登录视图,因为它们代表不同的界面。
  • 请注意ViewLogin里面可能有@Autowired因此应该是Spring管理的。只是navigator.addView(...)不起作用。

我可以尽可能接近@SpringView注释,但是从UI端开始吗?

1 个答案:

答案 0 :(得分:0)

围绕消息来源进行搜索 - 实际上除了通过UI注释之外,无法为View配置适用的@SprngView

对于当前解决方案,UI类的以下配置按预期工作:

@SpringUI(path = "")
public class MainUI extends UI {

    // Now we need to configure views.
    @SpringView(name = ViewMain.NAME, ui = {MainUI.class})
    static private class OurViewMain extends ViewMain {}

    @SpringView(name = ViewLogin.NAME, ui = {MainUI.class})
    static private class OurViewLogin extends ViewLogin {}

    @override
    protected void init(....) {
        ....
    }

}

所以实际上我扩展了视图而没有任何改变并注释'派生'类。这允许在一个地方编码视图并将其分配给另一个地方的UI(或多个UI)。这使得同一视图的不同命名成为不同的UI。

希望很快@SpringView配置将不那么线性,并允许这样的事情。我认为没有任何问题可以实现。