Vaadin 在FormLayout中包含CDI的ComboBox数据源

Vaadin 在FormLayout中包含CDI的ComboBox数据源,vaadin,cdi,vaadin7,Vaadin,Cdi,Vaadin7,我使用Vaadin7.3和CDI插件,它将我的Vaadin应用程序与我的EJB后端连接起来。我的EJB后端有一个用于从数据库读取所有实体的DAO MyAppUI-处理基本模板、导航 MyWindow—只是一个模式窗口,如果我按下MyAppUI上的按钮,它就会显示,并显示MyForm的一个实例 MyForm—声明应用程序实体的表单 MyAppUI和MyWindow通过CDI插件进行管理,允许我注入EJB后端的DAO,但MyForm只是FormLayout的一个子类,不由CDI管理。表单包含一个

我使用Vaadin7.3和CDI插件,它将我的Vaadin应用程序与我的EJB后端连接起来。我的EJB后端有一个用于从数据库读取所有实体的DAO

  • MyAppUI-处理基本模板、导航
  • MyWindow—只是一个模式窗口,如果我按下MyAppUI上的按钮,它就会显示,并显示MyForm的一个实例
  • MyForm—声明应用程序实体的表单

MyAppUI和MyWindow通过CDI插件进行管理,允许我注入EJB后端的DAO,但MyForm只是FormLayout的一个子类,不由CDI管理。表单包含一个组合框,它应该显示DAO可以访问的所有数据。如何将DAO注入我的表单?

您有几种可能性

  • 不要自己创建
    MyForm
    ,而是使用@inject进行注入。然后可以在
    MyForm
    中插入DAO。为此,您可能需要更改
    MyForm
    的构造函数,或者将构造函数转换为@PostConstruct注释的方法,并使用空构造函数。如果有用,您可以使用@UIScoped注释
    MyForm

  • 将DAO传递给
    MyForm
    的构造函数,或者如果以后只需要传递给某个函数(setter)

  • 在MyWindow中定义
    MyForm
    为非静态类,并使用注入MyWindow的DAO

  • 将DAO添加到
    VaadinSession
    中,并在
    MyForm

  • 我想还有更多的可能性,但这些都是我在几秒钟内想到的。我认为1。是最干净、最可扩展的方式