在网上搜索时,我发现应该可以@Inject一些方便的JSF对象到CDI bean中,这些对象应该由JSF生成并通过qualifiers在javax.faces.annotation。*中公开(例如@RequestMap或@ SessionMap)。
但是,我无法@Inject这些资源到CDI Beans中。甚至注入ExternalContext
或FacesContext
也会失败,正如JSF 2.3-spec所述,@ Inject以及以下内容应该可以实现:
javax.faces.context.Flash
javax.servlet.http.HttpSession <-这个正在工作
@RequestScoped
public class SimpleRequestParamReportProvider implements ReportParamsProvider {
@Inject // <-- FAILS
ExternalContext externalContext;
@Inject // <-- FAILS
FacesContext facesContext;
@Inject @RequestMap // <-- FAILS
Map<String, Object> requestMap;
@Inject // <-- WORKS
HttpSession httpSession;
应用程序启动时显示错误:
带有限定符@Default的FacesContext类型的依赖关系未满足 在注入点[BackedAnnotatedField] @注入report.SimpleRequestParamReportProvider.facesContext
我正在使用符合JSF 2.3的 JBoss EAP 7.2 https://access.redhat.com/articles/113373
还有其他人遇到过同样的问题吗?有什么我想念的吗?
编辑 这是我正在使用的WEB-INF / faces-config-xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"
version="2.3">
</faces-config>
编辑2 :一旦添加了@FacesConfig注释的Java类,JSF对象的注入就可以工作了:
@FacesConfig(version = FacesConfig.Version.JSF_2_3)
public class FacesActivator {}