带有CDI的ComboBox数据源在FormLayout中

时间:2014-09-11 07:59:13

标签: vaadin cdi vaadin7

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

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

MyAppUI MyWindow 通过CDI Addon进行管理,允许我注入EJB后端的DAO,但 MyForm 只是一个子类FormLayout而不是由CDI管理。表单包含一个ComboBox,它应显示DAO可访问的所有数据。我如何在 MyForm 中注入我的DAO?

1 个答案:

答案 0 :(得分:2)

你有几种可能性。

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

  2. 将DAO传递给MyForm的构造函数,或者稍后只需要某个函数(setter)。

  3. MyForm定义为MyWindow中的非静态类,并使用注入MyWindow的DAO。

  4. 将DAO添加到VaadinSession并在MyForm

  5. 中再次获取

    我想还有更多的可能性,但这些是在几秒钟内出现在我脑海中的。我认为1.是最干净,最可扩展的方式。