Пользовательский конвертер с атрибутами/внедрением больше не работает после обновления до JSF 2.3

Я пытаюсь обновить/использовать собственный конвертер, который работал с JSF 2.2 (на Wildfly 13), для работы с JSF 2.3 (с Mojarra 2.3.9.SP02, работающим на Wildfly 17.0.1)

Преобразователь используется через собственный тег, определенный в библиотеке тегов. Все в порядке, пока не используются атрибуты тега. Атрибуты просто не заданы в конвертере. Сеттеров никогда не вызывают. Но если я удалю 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 {

}

beans.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>

person Heiko Tappe    schedule 19.08.2019    source источник
comment
И поскольку я нахожусь в процессе переноса своего приложения с Wildfly 13/JSF 2.2 на Wildfly 17/JSF 2.3, конвертер работал, по крайней мере, с JSF 2.2 и Wildfly 13. Для Wildfly 11 я не могу сказать.   -  person Heiko Tappe    schedule 19.08.2019
comment
Что касается кода конвертера: я бы сказал, что он выглядит довольно прямолинейно, не так ли? У вас есть код конвертера, с которым я могу его сравнить?   -  person Heiko Tappe    schedule 19.08.2019
comment
Лично у меня нет кода для пользовательских конвертеров с помощью тегов (я использую идентификаторы), но в самом JSF есть конвертеры, как и в Omnifaces. Оба источника открыты. Похоже, что Omnifaces не использует файл taglib, но создал обработчик тегов для конвертеров: github.com/omnifaces/omnifaces/blob/3.x/src/main/java/org/ github.com/omnifaces/omnifaces/blob/3.x /src/main/java/org/   -  person Kukeltje    schedule 19.08.2019
comment
Да, taglib подхватывается и используется конвертер (вызывается getAsString и getAsObject). Просто установщик атрибута никогда не вызывается. Таким образом, атрибут всегда равен нулю.   -  person Heiko Tappe    schedule 19.08.2019
comment
Хороший выстрел. Да, удаление manage=true помогло. Но тогда впрыск, например, больше не работает. Разве я не могу иметь оба?   -  person Heiko Tappe    schedule 19.08.2019
comment
Вам нужно, чтобы конвертер был куда-то впрыснут? Так как это то, что managed=true позволяет, если я правильно прочитал спецификации   -  person Kukeltje    schedule 19.08.2019
comment
Да, извините, что не был достаточно точен в том, что я сказал. Дело в том, что в JSF 2.2 у меня была возможность определить преобразователь в библиотеке тегов с атрибутами, способными к внедрению. Теперь, пытаясь перейти на JSF 2.3, похоже, это больше не работает. И последние пару дней гугление решений не помогло. Поэтому я и обратился за помощью сюда.   -  person Heiko Tappe    schedule 19.08.2019
comment
Нет. Мне не нужно, чтобы преобразователь куда-то впрыскивался. Мне нужны только некоторые введенные поля внутри конвертера.   -  person Heiko Tappe    schedule 19.08.2019
comment
Это должно работать без managed=true, если я правильно понял. Что, если вы также удалите @Dependent   -  person Kukeltje    schedule 19.08.2019
comment
Удаление @Dependent к сожалению тоже не помогает.   -  person Heiko Tappe    schedule 19.08.2019
comment
Это Мохарра 2.3.9.SP02   -  person Heiko Tappe    schedule 19.08.2019
comment
И я добавил свой Faces-config.xml   -  person Heiko Tappe    schedule 19.08.2019
comment
А что, если вы сделаете stackoverflow.com/questions/52511992/   -  person Kukeltje    schedule 19.08.2019
comment
Я отредактировал заголовок и введение. Лучше?   -  person Heiko Tappe    schedule 19.08.2019
comment
Да, я изменил некоторые мелочи, хотя и удалил много своих комментариев (это вы в вопросе   -  person Kukeltje    schedule 19.08.2019
comment
Проблема может быть связана/похожа на то, что описано здесь: в управляемом режиме конвертер-оболочка ( CdiConverter) создается и делегируется исходному преобразователю (здесь: ConverterWithAttr). Но конвертер-оболочка не имеет атрибута.   -  person Heiko Tappe    schedule 19.08.2019
comment
Да, отсюда я тоже получил свою информацию (и источник), но в других местах также говорится, что это managed=true делает bean-компоненты инъекционными в целях, а не целью инъекций. Последний должен просто работать без `managed=true, на мой взгляд, иначе он сильно нарушает обратную совместимость.   -  person Kukeltje    schedule 19.08.2019