【发布时间】:2019-03-01 21:26:07
【问题描述】:
服务器:Payara 5.183。
使用转换器时,会引发 NullPointerException,因为注入的 EJB 为 null(System.out.println 打印“null”)。
如果我使用 JSF 2.3 之前使用的解决方法,它可以工作(注入不为空):用 @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 不起作用)还是你能帮我找出我的错误?
【问题讨论】:
-
faces-config.xml中声明的版本正确的是2.3。
-
GIT-HUB 上的一个项目来重现问题:github.com/richard-grin/testConverter2。您可以在 AccountManager 类中更改数据库的定义。要重现该问题,请编辑 AccountConverter 以使用 @FacesConverter 而不是 Named 和 RequestScoped,并编辑 operations.xhtml 以使用
中的 converterId
标签: jsf cdi converters