Jboss 无法在CDI@RequestScope托管Bean中注入ExternalContext或RequestParam
在web上搜索时,我发现可以将一些方便的JSF对象@注入CDIBeans,这些对象应该由JSF生成,并通过javax.faces.annotation.*中的限定符公开(如@RequestMap或@SessionMap) 但是,我无法将这些资源@injected到CDIBeans中。甚至注入Jboss 无法在CDI@RequestScope托管Bean中注入ExternalContext或RequestParam,jboss,cdi,weld,jsf-2.3,java-ee-8,Jboss,Cdi,Weld,Jsf 2.3,Java Ee 8,在web上搜索时,我发现可以将一些方便的JSF对象@注入CDIBeans,这些对象应该由JSF生成,并通过javax.faces.annotation.*中的限定符公开(如@RequestMap或@SessionMap) 但是,我无法将这些资源@injected到CDIBeans中。甚至注入ExternalContext或FacesContext也会失败,正如JSF 2.3-spec中所述,这应该可以@Inject以及以下内容: javax.faces.application.Resource
ExternalContext
或FacesContext
也会失败,正如JSF 2.3-spec中所述,这应该可以@Inject以及以下内容:
- javax.faces.application.ResourceHandler
- javax.faces.context.Flash
- javax.servlet.http.HttpSession当您实际上没有使用JSF 2.3+时(即,当您认为您使用的是JSF 2.3,但环境/构建实际上没有正确配置时),将引发此异常。但是,在目前提供的信息中看不到该问题的原因。所以这个问题无法回答。可能的原因之一是您没有在JBoss EAP 7.2中安装/激活JSF 2.3。另一个可能的原因是您忘记在faces-config.xml和/或
trigger.Hi@BalusC中设置JSF2.3标志。谢谢你的回答!我用我的应用程序正在使用的faces-config.xml更新了我的问题。是否有一个标志我在那里丢失激活JSF2.3?@BalusC你的评论为我指明了正确的方向。我没有意识到需要一个@FacesConfig
激活器,它似乎已经解决了注入问题。有没有一种方法可以从faces-config.xml激活,而不需要@FacesConfig
?谢谢。为了防止它对某人有帮助,我可以使用@FacesConfig
:FacesContext
FacesContext.getCurrentInstance().getExternalContext()
@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;
<?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>
@FacesConfig(version = FacesConfig.Version.JSF_2_3) public class FacesActivator {}