Я пишу составной компонент, который содержит <h:selectManyMenu>
, и я хотел бы, чтобы клиенты этого компонента поставить валидатор и конвертеры путем размещения <f:validator>
и <f:converter>
тегов, как дети тега моего составного компонента. В интерфейсной секции моего композита я имеюJSF 2.2 Композитные Компонентный EditableValueHolder
<composite:editableValueHolder name="select-input" targets="select-many" />
и в секции реализации:
<h:selectManyMenu id="select-many" styleClass="hidden select-input" value="#{cc.attrs['value']}" binding="#{cc.inputComponent}">
<composite:insertChildren />
</h:selectManyMenu>
и, наконец, использование:
<cwi:selectManyMenu id="select-many-menu" value="#{selectManyBean.selectedItems}">
<f:converter converterId="converter.testItem" for="select-many" />
<f:validator validatorId="validator.testItem" for="select-input" />
<f:selectItems value="#{selectManyBean.possibleItems}" var="item" itemValue="#{item}" itemLabel="#{item.description}" />
</cwi:selectManyMenu>
Проблема называются ни валидатор, ни преобразователь. У меня также есть классы валидатора и конвертера, каждый из которых аннотируется @FacesValidator('validator.testItem')
и @FacesConverter("converter.testItem")
соответственно. Они правильно подбираются, потому что, если я перемещаю теги и <f:converter>
внутри составного компонента, под <composite:insertChildren>
все работает нормально, но я бы лучше разоблачил их для клиентов, чем их жесткий код. Есть ли что-то о том, как insertChildren работает при использовании editableValueHolder? Чтобы получить эту работу, я мог бы просто сделать идентификатор конвертера и идентификатора проверки частью интерфейса, но это теряет некоторую гибкость для передачи атрибутов преобразователям и валидаторам.
Какой тип/версия JSF? После того, как я установил «очевидную» опечатку в '' к значению, которое вы уже получили в '', оно отлично работает для меня на Mojarra 2.2.12. –
BalusC