【问题标题】:Inject beans from other projects into Vaadin view将其他项目中的 bean 注入 Vaadin 视图
【发布时间】:2013-08-31 12:21:08
【问题描述】:

在我的一个 Vaadin 视图中,我试图通过使用 @Inject 注入来获取驻留在另一个项目 (bll) 中的业务对象。

Vaadin 视图:

public class FruitSaladView extends VerticalLayout implements View {
    @Inject
    BananaService bananaService;
...
}

我不能这样做,当然,bananaService 对象在运行时为空,因为我无处可对包进行组件扫描。

我正在使用注释,所以我的 Vaadin Web 项目中没有 web.xml,我什至没有 WEB-INF 文件夹。

我也知道有一些替代方案,例如 CDI-UtilsVaadin CDI Vaadin 插件,以及 some other 解决方案,但它们似乎都将东西注入主 UI(而不是视图) 以及来自 Web 应用程序本身,而不是来自其他模块。

我正在使用 Vaadin 7 和 Tomcat 7(只要在给出以下问题的答案的情况下使用 Tomcat 可行)

问题:将另一个模块中的 bean 注入 Vaadin 视图的推荐方法是什么?我需要做什么才能完成此操作?

后续问题:使用上述方法后,这个应用使用Tomcat会不会有问题?

【问题讨论】:

  • 将您的其他项目转换为 jar。放入您当前的项目类路径。我不认识 Vaadin,但一定有一个地方可以让您访问 IoC 容器。在那里声明你的 bean。
  • 这就是问题所在。我无法访问 IoC 容器,因为我不知道如何或在哪里进行。在其他项目中,我在代码中使用 @Inject 并在 context.xml 中使用组件扫描成功注入。 Vaadin 本身不使用 context.xml。

标签: java vaadin vaadin7


【解决方案1】:

Tomcat 只是 Servlet 容器,如果你想使用 CDI,你必须使用 JEE6 兼容的服务器,比如 tomee 或 jboss。 如果您对集成 Vaadin 和 CDI 的最佳实践感兴趣,我建议您从:http://www.adam-bien.com/roller/abien/entry/essential_vaadin_7_java_ee

您写道,您希望直接注入 bean Vaadin 视图。分析示例代码https://github.com/vaadin/cdi/blob/master/vaadin-cdi-example/src/main/java/com/vaadin/cdi/example/view/RootView.java,了解如何使用 vaadin-cdi 插件完成此操作

【讨论】:

  • 谢谢!我知道 Vaadin-CDI 插件。如果可以,我宁愿使用不需要完整应用程序服务器的方法。我想使用Tomcat。如果我想将 bean @Inject/@Autowired 到 Vaadin 视图类,CDI/EJB 是否还有其他选择,或者这是我想要实现的最佳建议?
  • @Roger,我认为您应该为应用程序服务器敞开心扉。如果您喜欢 Tomcat,请查看 TomEE。但如果你真的只喜欢 Tomcat,请阅读这个解决方案:lucubratory.eu/getting-weld-cdi-into-tomcat-7
猜你喜欢
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
相关资源
最近更新 更多