我使用Vaadin7.3和CDI Addon将我的Vaadin应用程序与EJB后端连接起来。我的EJB后端有一个DAO,用于从数据库中读取所有实体。
MyAppUI 和 MyWindow 通过CDI Addon进行管理,允许我注入EJB后端的DAO,但 MyForm 只是一个子类FormLayout而不是由CDI管理。表单包含一个ComboBox,它应显示DAO可访问的所有数据。我如何在 MyForm 中注入我的DAO?
答案 0 :(得分:2)
你有几种可能性。
不要自己创建MyForm
,而是注入@Inject。然后你可以在MyForm
中注入DAO。为此,您可能需要更改MyForm
的构造函数或将构造函数转换为@PostConstruct注释方法并使用空构造函数。如果有用,您可以使用@UIScoped注释MyForm
。
将DAO传递给MyForm
的构造函数,或者稍后只需要某个函数(setter)。
将MyForm
定义为MyWindow中的非静态类,并使用注入MyWindow的DAO。
将DAO添加到VaadinSession
并在MyForm
我想还有更多的可能性,但这些是在几秒钟内出现在我脑海中的。我认为1.是最干净,最可扩展的方式。