Jsf 2 将JSF托管bean迁移到CDI托管bean
我计划将web应用程序从使用JSF托管bean转换为使用CDI托管bean。我知道我需要做以下工作:Jsf 2 将JSF托管bean迁移到CDI托管bean,jsf-2,migration,cdi,managed-bean,omnifaces,Jsf 2,Migration,Cdi,Managed Bean,Omnifaces,我计划将web应用程序从使用JSF托管bean转换为使用CDI托管bean。我知道我需要做以下工作: 在WEB-INF中添加一个空的beans.xml文件 将所有JSF@ManagedBean替换为CDI@Named注释 用CDI或OmniFaces范围注释替换所有JSF范围注释 用CDI@Inject注释替换所有JSF@ManagedProperty 这就是我们需要做的一切吗?有什么我需要注意的地方吗?基本上,如果您已经在Java EE服务器上,这就是您需要做的所有事情。在Tomcat上,首先
这就是我们需要做的一切吗?有什么我需要注意的地方吗?基本上,如果您已经在Java EE服务器上,这就是您需要做的所有事情。在Tomcat上,首先需要手动安装CDI。博客中详细介绍了Weld和OpenWebBeans的说明 需要注意以下问题:
- 虽然OmniFaces 2.x“正式”要求JSF2.2,但OmniFaces 2.0/2.1在技术上向后兼容JSF2.1,在TomEE的案例中,OmniFaces 2.2也应该在带有JSF2.1的TomEE 1.x上工作,但OmniFaces 2.2有一个硬JSF2.2依赖项(由于新的
标记)如果不将MyFacesJSF实现升级到兼容2.2的版本,或者自身升级到Tomee7.x,就不会部署到Tomee1.x上。另见 - 当您使用多个WAR部署一个EAR,每个WAR都有自己的OmniFaces库时,通常所有CDI功能只在一个WAR中工作,因为WAR提供的库的CDI上下文被错误地解释为EAR范围。这是CDI规范中的一个疏忽,尚未在未来的CDI版本中修复。另见
- 当您想在
或@facescoverter
中使用OmniFaces提供的CDI注入支持,并且要创建/使用与CDI 1.1兼容的@FacesValidator
(因此不是CDI 1.0兼容的或空的),那么您需要确保已显式设置beans.xml
bean发现模式=
。另请参阅beans.xml中的“all”
- 在替换
时,请注意标准CDI对此没有直接等效项。您可以使用@ManagedBean(eager=true)
进行此操作。OmniFaces为此提供注释。另请参阅@Observes
- 在JSF2.0/2.1/2.2中替换
时,请注意不能注入@ManagedProperty
、{param.xxx}
和{cookie.xxx}
直接通过{initParam.xxx}
单独使用,而这仅仅是通过@Inject
可以实现的。OmniFaces分别提供了,并用于此目的。只有在JSF 2.3中,才有一个新的@ManagedProperty
注释,其使用方式与原始的@javax.faces.annotation.ManagedProperty
自JSF2.3以来就被弃用了@javax.faces.bean.ManagedPrope>完全相同rty