无法在CDI @RequestScoped托管Bean中插入ExternalContext或RequestParam

时间:2019-06-04 23:46:33

标签: jboss cdi weld jsf-2.3 java-ee-8

在网上搜索时,我发现应该可以@Inject一些方便的JSF对象到CDI bean中,这些对象应该由JSF生成并通过qualifiers在javax.faces.annotation。*中公开(例如@RequestMap或@ SessionMap)。

但是,我无法@Inject这些资源到CDI Beans中。甚至注入ExternalContextFacesContext也会失败,正如JSF 2.3-spec所述,@ Inject以及以下内容应该可以实现:

  • javax.faces.application.ResourceHandler
  • 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 {}

0 个答案:

没有答案