我有以下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注入它总是空。这似乎在2.3注射功能不工作(还),或者我失去了一些东西:)
我使用的是EAP 7.0钻嘴鱼科2.3.0。而对EAP 7.0和7.1使用2.3.3成功了测试。
我目前的解决方法是更换,我需要注入的CDI豆这样的代码:
return CDI.current().select(Web.class).get().getAllActiveOnderwerpen().stream().filter(o -> o.getId().equals(Long.parseLong(value))).findFirst().get();
这工作得很好,但是是有点难看,当然:)
任何人都经历了这种行为?
我有同样的问题,我找到了解决办法。
您必须创建一个配置豆说明JSF版本:
import javax.faces.annotation.FacesConfig;
import javax.faces.annotation.FacesConfig.Version;
@FacesConfig(
// Activates CDI build-in beans
version=Version.JSF_2_3
)
public class ConfigBean {
}