- 在WEB-INF中添加一个空的beans.xml文件。
- 将所有JSF @ManagedBean替换为CDI @Named注释。
- 将所有JSF范围注释替换为CDI或OmniFaces范围注释。
- 将所有JSF @ManagedProperty替换为CDI @Inject注释。
虽然OmniFaces 2.x "正式"要求JSF 2.2,但是OmniFaces 2.0/2.1在技术上与JSF 2.1向后兼容,因此在TomEE 1.x上使用JSF 2.1时也应该可以工作。但是由于新的<o:viewAction>
标签,OmniFaces 2.2有一个硬性的JSF 2.2依赖关系,在不升级其MyFaces JSF实现为2.2兼容版本或升级为TomEE 7.x的情况下,无法部署到TomEE 1.x上。请参见 OmniFaces Compatibility Matrix。
当您部署具有各自拥有OmniFaces库的多个WAR的EAR时,通常只有一个WAR中所有CDI功能都能正常工作,因为WAR提供的库的CDI上下文被错误地解释为EAR范围内的上下文。这是CDI规范中的一个疏忽,尚未在将来的CDI版本中修复。请参见 OmniFaces Known Issues (CDI)。
当您想要在@FacesConverter
或@FacesValidator
中使用OmniFaces提供的CDI注入支持,并且您将创建/使用符合CDI 1.1的beans.xml
(而不是符合CDI 1.0的或空的beans.xml
)时,您需要确保已在beans.xml
中明确设置了bean-discovery-mode="all"
。请参见 @FacesConverter
showcase。
当替换JSF 2.0/2.1/2.2中的@ManagedBean(eager=true)
时,请注意标准CDI没有直接等价物。您将使用@Observes
来实现这一点。OmniFaces为此提供了@Eager
注释。请参见 How to configure a start up managed bean?
当替换JSF 2.0/2.1/2.2中的@ManagedProperty
时,请注意您不能仅通过@Inject
直接注入#{param.xxx}
、#{cookie.xxx}
和#{initParam.xxx}
,而这在@ManagedProperty
中是可能的。OmniFaces分别为此提供了@Param
、@Cookie
和@ContextParam
。只有在JSF 2.3中才有一个新的@javax.faces.annotation.ManagedProperty
注释,可以与原始的@javax.faces.bean.ManagedProperty
完全相同,后者自JSF 2.3以来已被弃用。