我有以下 FacesConverter:
@FacesConverter(forClass = Onderwerp.class, managed = true)
public class OnderwerpConverter implements Converter<Onderwerp> {
@Inject
private Web web;
@Override
public Onderwerp getAsObject(FacesContext context, UIComponent component, String value) {
log.trace("Converting to object from string: " + value);
return web.getAllActiveOnderwerpen().stream().filter(o -> o.getId().equals(Long.parseLong(value))).findFirst().get();
}
@Override
public String getAsString(FacesContext context, UIComponent component, Onderwerp onderwerp) {
log.trace("Converting to string from object: " + onderwerp);
return onderwerp.getId().toString();
}
}
引用的 CDI bean 是:
@Named
@ApplicationScoped
public class Web { ... }
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">
现在,无论我通过 @Inject 注入哪种 bean,它始终为空。似乎 2.3 中的注入功能(还)不起作用,或者我遗漏了一些东西:)
我在 EAP 7.0 上使用 Mojarra 2.3.0。还在 EAP 7.0 和 7.1 上使用 2.3.3 进行了测试,但未成功。
我当前的解决方法是替换需要注入 CDI bean 的代码,如下所示:
return CDI.current().select(Web.class).get().getAllActiveOnderwerpen().stream().filter(o -> o.getId().equals(Long.parseLong(value))).findFirst().get();
这很好用,但当然有点丑:)
有人经历过这种行为吗?