0

我正在尝试升级/使用与 JSF 2.2(在 Wildfly 13 上)一起工作的自定义转换器以在 JSF 2.3 上工作(在 Wildfly 17.0.1 上运行 Mojarra 2.3.9.SP02)

转换器通过标签库中定义的自己的标签使用。只要不使用标签属性,一切都很好。只是没有在转换器中设置属性。二传手永远不会被调用。但是,如果我managed = true从转换器中删除了属性,那么注入将不再起作用。

转换器是这样使用的:

<h:inputText id="text" value="#{welcome.text}">
    <cdijsf:converterWithAttr id="myConverter" attr="myAttrValue" />
</h:inputText>

标签库:

<facelet-taglib version="2.3"
        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-facelettaglibrary_2_3.xsd">
    <namespace>http://cdijsf.transdata.net/jsf</namespace>
    <tag>
        <tag-name>converterWithAttr</tag-name>
        <converter>
            <converter-id>cdijsf.ConverterWithAttr</converter-id>
        </converter>
        <attribute>
            <name>attr</name>
            <type>java.lang.String</type>
        </attribute>
    </tag>
</facelet-taglib>

这是转换器代码:

@Dependent
@FacesConverter(value = "cdijsf.ConverterWithAttr", managed = true)
public class ConverterWithAttr implements Converter<String> {

    @Inject
    private BeanManager beanManager;

    private String attr;

    public ConverterWithAttr() {
    }

    @PostConstruct
    private void init() {
      // If 'managed = true' beanManager is injected at this point.
      // If 'managed = false' beanManager is null at this point
    }

    @Override
    public String getAsObject(FacesContext context, UIComponent component, String value) {
        return value;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, String value) {
        return value;
    }

    public String getAttr() {
        return attr;
    }

    public void setAttr(String attr) {
        // If 'managed = true' setAttr is never called
        // If 'managed = false' setAttr is called
        this.attr = attr;
    }

}

面孔-config.xml:

<faces-config version="2.3"
        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">
</faces-config>

而且我还像这样明确声明 JSF 2.3:

@FacesConfig(version = Version.JSF_2_3)
@ApplicationScoped
public class JsfConfiguration {

}

豆类.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_2_0.xsd"
    version="2.0"
    bean-discovery-mode="annotated">
</beans>
4

0 回答 0