[使用Webapp中捆绑的myfaces并在Wildfly上运行时未调用CDI Bean方法

问题描述 投票:0回答:3

我想将我的JSF应用程序从ManagedBean迁移到CDI Bean。

首先,我已经做了一个简单的测试,以查看CDI是否正常工作,但不能正常工作。这是我的示例,使用Wildfly 10和myfaces 2.2

。WEB-INF中的bean.xml

<beans 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/beans_1_1.xsd"
       bean-discovery-mode="all">
</beans>

xhtml页面:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">

<h:head>
    <title>
        test
    </title>
</h:head>

<h:body>
    <h:outputText value="#{CDITest.hello}"/>
    <h:outputText value="test"/>
</h:body>

</html>

后备豆

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import java.io.Serializable;

  @Named("CDITest")
  @SessionScoped
  public class CDITest implements Serializable{

    public String getHello(){
      return "Hello";
    }
}

输出

测试

没有错误消息(!),也没有对CDITest.getHello()方法的调用。我缺少什么?

jsf wildfly cdi myfaces
3个回答
2
投票

问题更普遍。在JSF 2.3中,JSF通过BeanManager#getELResolver拾取CDI。在JSF 2.3之前的版本中,容器或CDI impl必须与JSF和CDI结合。


1
投票

我认为您需要声明一个@FacesConfig注释类,以在JSF 2.3中激活CDI。>

import javax.enterprise.context.ApplicationScoped;
import javax.faces.annotation.FacesConfig;

@FacesConfig
@ApplicationScoped
public class ConfigurationBean {

}

0
投票

在Wildfly 19.0.0上升级到myfaces-2.3.6(jsf 2.3)解决了该问题。请注意,您需要@Cristyan建议的@FacesConfig类。

© www.soinside.com 2019 - 2024. All rights reserved.