https://github.com/javaserverfaces/mojarra#activating-cdi-in-jsf-23
答案是:
默认情况下,jsf2.3将在jsf2.2 modus中运行,以支持CDI。即使
当您使用与jsf2.3兼容的
faces-config.xml
jsf2.3的新特性是JSF工件的注入和EL解析
(
spec issue 1316
)在您显式激活此之前不会工作。
换句话说,
@Inject FacesContext
默认情况下不工作。这
为了使jsf2.3完全向后兼容,必须使用。
目前只有一种方法可以在jsf2.3和JSF中激活CDI
因此,让jsf2.3以完整的jsf2.3模式运行。把钥匙放好
@FacesConfig
任意CDI托管bean上的注释。对于
例如,一个通用的启动/配置bean。
@FacesConfig
@ApplicationScoped
public class YourApplicationConfig {
// ...
}
完整示例:
import javax.enterprise.context.ApplicationScoped;
import javax.faces.annotation.FacesConfig;
@FacesConfig
@ApplicationScoped
public class Jsf23Activator {
// ...
}
@ApplicationScoped
14:23:28,805 INFO [javax.enterprise.resource.webcontainer.jsf.config] (ServerService Thread Pool -- 82) Initializing Mojarra 2.3.5.SP2 for context '/blah'
14:23:30,415 INFO [javax.enterprise.resource.webcontainer.jsf.config] (ServerService Thread Pool -- 82) Monitoring file:/C:/dev/servers/wildfly-14.0.1.Final/standalone/deployments/blah.war/WEB-INF/faces-config.xml for modifications