将JSF托管的bean迁移到CDI托管的bean

我打算将使用JSF托管bean的Web应用程序转换为使用CDI托管的bean。 我知道我需要做下面的事情:

  • 在WEB-INF中添加一个空的beans.xml文件。
  • 将所有JSF @ManagedBean替换为CDI @Named注释。
  • 将所有JSF范围注释替换为CDI或OmniFaces范围注释。
  • 将所有JSF @ManagedProperty替换为CDI @Inject注释。
  • 这是否需要完成? 是否有任何我需要注意的陷阱?


    基本上,只要你已经在Java EE服务器上,那就是你所需要做的。 在Tomcat上时,您需要先手动安装CDI。 有关Weld和OpenWebBeans的说明详见博客如何在Tomcat中安装CDI?

    下面的问题需要注意:

  • 虽然OmniFaces 2.x“正式”需要JSF 2.2,但OmniFaces 2.0 / 2.1在技术上与JSF 2.1兼容,并且应该在TomEE的情况下使用JSF 2.1工作在TomEE 1.x上,但OmniFaces 2.2具有很强的JSF 2.2依赖性(由于新的<o:viewAction>标记),并且不会在TomEE 1.x上进行部署,而无需将其MyFaces JSF实现升级到2.2兼容版本,或者将其本身升级到TomEE 7.x. 另请参阅OmniFaces兼容性矩阵。

  • 当您将EAR与每个自己的OmniFaces库一起部署多个WAR时,通常所有CDI功能都只能在一个WAR中工作,因为WAR提供的库的CDI上下文被错误地解释为EAR范围。 这是CDI规范中的一个疏忽,尚未在未来的CDI版本中修复。 另请参阅OmniFaces已知问题(CDI)。

  • 当您想在@FacesConverter@FacesValidator使用OmniFaces提供的CDI注入支持时,您将创建/使用兼容CDI 1.1的beans.xml (因此不是CDI 1.0兼容的或空的),那么您需要确保已在beans.xml显式设置bean-discovery-mode="all" 。 另请参阅@FacesConverter展示。

  • 当替换@ManagedBean(eager=true) ,请注意标准CDI没有与此等效的功能。 OmniFaces为此目的提供@Eager注释。

  • 当替换@ManagedProperty ,请注意您不能直接通过@Inject注入#{param.xxx}#{cookie.xxx}#{initParam.xxx} ,而只能通过@ManagedProperty 。 OmniFaces分别为此提供了@Param@Cookie@ContextParam

  • 链接地址: http://www.djcxy.com/p/90773.html

    上一篇: Migrate JSF managed beans to CDI managed beans

    下一篇: How to import a npm package in an angular2 component?