在JSF 2.3中无法在转换器中进行注入

时间:2018-09-26 07:13:32

标签: jsf cdi converters

服务器:Payara 5.183。

使用转换器时,将引发NullPointerException,因为注入的EJB为null(System.out.println打印“ null”)。

如果我使用JSF 2.3之前使用的解决方法,则该方法有效(注入不为null):用@Name替换@FacesConverter。

转换器:

@FacesConverter(value = "compteConverter", managed = true)
public class CompteConverter implements Converter<CompteBancaire> {

  @EJB
  private GestionnaireCompte gestionnaireCompte;

  @Override
  public CompteBancaire getAsObject(FacesContext context, UIComponent component, String id) {
    if (id == null || id.isEmpty()) {
      return null;
    }
    try {
      System.out.println("*****EJB gestionnaireCompte=" + gestionnaireCompte);
      return gestionnaireCompte.getCompte(Long.parseLong(id));
    } catch (NumberFormatException e) {
      throw new ConverterException(new FacesMessage("Id de compte invalide"), e);
    }
  }

  @Override
  public String getAsString(FacesContext arg0, UIComponent arg1, CompteBancaire compte) { ... }

此转换器的用途:            

  <ui:define name="metadata">
    <f:metadata>

      <f:viewParam name="id" value="#{operations.compte}"
                     converter="compteConverter"/>

是Mojarra / Payara的错误(managed = true无法正常工作)还是可以帮助我找到错误?

1 个答案:

答案 0 :(得分:0)

托管转换器默认情况下不工作。为了使它们起作用,我添加了一个@FacesConfig注释的CDI bean(用于JSF 2.3)和@ApplicationScoped(它将是带有此注释的CDI bean)。