Я создал тег Facelet для рендеринга текстового ввода с меткой.
Это очень полезно, когда вы избегаете повторения одного и того же кода снова и снова.
Хотя я борюсь с различными вариантами использования на этой единственной вкладке (дата против текста, обязательная и не обязательная, текстовая область против обычного текста и т. Д.)
В результате у меня в компоненте было несколько тегов с более или менее сложным отображаемым атрибутом, как показано здесь:
<h:inputText
onblur="makeNotEmpty(this)"
onfocus="makeNotEmptyFocus(this)"
id="#{cid}"
value="#{value}"
rendered="#{textarea!='true' and type!='email' and notrequired!='true' and nullablenumber!='true'}"
style="#{style }"
required="true"
disabled="#{disabled }">
<f:validator validatorId="notnull"/>
</h:inputText>
<h:inputText
onblur="
makeNotEmpty(this)"
onfocus="makeNotEmptyFocus(this)"
id="#{cid}"
value="#{value}"
rendered="#{type=='email'}"
style="#{style }"
required="true"
disabled="#{disabled }">
<f:validator validatorId="email" />
<f:validator validatorId="notnull"/>
</h:inputText>
Конечно, это не оптимально и довольно утомительно писать.
Еще одна проблема, которую я считаю, заключается в том, что при использовании этого подхода у меня есть несколько компонентов с одинаковым идентификатором в дереве компонентов (я не уверен, что это проблема, поскольку только один элемент с одинаковым идентификатором отображается одновременно, но я видел несколько странных проблемы с воссозданием дерева страниц, заставляет меня верить, что это проблема)
Я использую ICEFaces 1.8.2 (но проблема должна быть независимой от реализации).
Какое решение для этого? С помощью ? Что-то другое? Спасибо!