gpt4 book ai didi

cdi - JSF 2.3 FacesConverter 中未注入(inject) ApplicationScoped bean

转载 作者:行者123 更新时间:2023-12-02 04:18:39 24 4
gpt4 key购买 nike

我有以下 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 注入(inject)什么类型的 bean,它总是为 null。看来 2.3 中的注入(inject)功能还不起作用,或者我错过了一些东西:)

我在 EAP 7.0 上使用 Mojarra 2.3.0。还在 EAP 7.0 和 7.1 上使用 2.3.3 进行了测试,但没有成功。

我当前的解决方法是替换需要注入(inject) CDI bean 的代码,如下所示:

return CDI.current().select(Web.class).get().getAllActiveOnderwerpen().stream().filter(o -> o.getId().equals(Long.parseLong(value))).findFirst().get();

这很好用,但当然有点难看:)

有人经历过这种行为吗?

最佳答案

我遇到了同样的问题,并找到了解决方案。

您必须创建一个指示 JSF 版本的配置 bean:

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 {

}

关于cdi - JSF 2.3 FacesConverter 中未注入(inject) ApplicationScoped bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43994118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com