代码之家  ›  专栏  ›  技术社区  ›  Kawu

FacesContext不能在带有jsf2.3的wildfly14中注入(Mojarra,主模块)

  •  0
  • Kawu  · 技术社区  · 6 年前

    我有个豆子:

    import javax.faces.context.FacesContext;
    import javax.faces.view.ViewScoped;
    
    ...
    
    @Named
    @ViewScoped
    public class SimpleBean implements Serializable
    {
        private static final long serialVersionUID = 1L;
    
        @Inject
        protected FacesContext facesContext;
    
        ...
    }
    

    根据

    https://arjan-tijms.omnifaces.org/p/jsf-23.html#1316

    这应该适用于2.3。。。

    部署到Wildfly 14时,会导致:

    13:02:33,516 INFO  [org.hibernate.dialect.Dialect] (ServerService Thread Pool -- 72) HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
    13:02:33,563 INFO  [org.hibernate.envers.boot.internal.EnversServiceImpl] (ServerService Thread Pool -- 72) Envers integration enabled? : true
    13:02:34,344 INFO  [org.hibernate.hql.internal.QueryTranslatorFactoryInitiator] (ServerService Thread Pool -- 72) HHH000397: Using ASTQueryTranslatorFactory
    13:02:34,531 WARN  [org.jboss.weld.Bootstrap] (MSC service thread 1-1) WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class com.sun.faces.flow.FlowDiscoveryCDIHelper is deprecated from CDI 1.1!
    13:02:34,918 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."auth-portal.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."auth-portal.war".WeldStartService: Failed to start service
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1728)
        at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1556)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type FacesContext with qualifiers @Default
      at injection point [BackedAnnotatedField] @Inject protected com.company.project.view.SimpleBean.facesContext
      at com.company.project.view.SimpleBean.facesContext(SimpleBean.java:0)
    
        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:378)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:290)
        at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:143)
        at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:164)
        at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:526)
        at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:64)
        at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:62)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:62)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:55)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
        at org.jboss.threads.JBossThread.run(JBossThread.java:485)
    
    13:02:34,918 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "auth-portal.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"auth-portal.war\".WeldStartService" => "Failed to start service
        Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type FacesContext with qualifiers @Default
      at injection point [BackedAnnotatedField] @Inject protected com.company.project.view.SimpleBean.facesContext
      at com.company.project.view.SimpleBean.facesContext(SimpleBean.java:0)
    "}}
    

    我的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">
        ...
    

    :

    顺便说一句,这里的答案并没有解决这个问题: How to inject FacesContext with JSF 2.3 and TomEE?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Kawu    6 年前

    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
    
    推荐文章