Дублированный идентификатор в пользовательском теге JSF при вложении тегов
Я перенес некоторые композиции в пользовательские теги из-за проблем с производительностью. При использовании композитов все идентификаторы генерируются правильно, но при использовании пользовательских тегов у меня возникает дублированное исключение идентификатора, даже я создал собственное выражение EL для генерации нового идентификатора.
После некоторых исследований кажется, что атрибуты тегов наследуются при вложении тега:
<far:fcontainer name="**father1**" type="panel">
<far:fcontainer type="panel">
<far:fcontainer type="panel">child 3</farTag:fcontainer>
</far:fcontainer>
</far:fcontainer>
В этом примере первый fcontainer должен иметь идентификатор отца1, а вложенные должны иметь сгенерированный идентификатор, но это то, что у меня есть:
<div id="**father1**" class="ui-widget-content">
<div id="**father1**" class="ui-widget-content">
<div id="**father1**" class="ui-widget-content">child3</div>
</div>
</div>
Пользовательский тег:
<ui:composition>
<p:outputPanel layout="block" styleClass="#{type == 'panel'?'ui-widget-content':''}"
id="#{empty name ? far:generateId() : name}">
<ui:insert />
</p:outputPanel>
<ui:composition>
Это нормально? Есть ли обходной путь?
Проверено на Моджарре 2.1.26.
Заранее спасибо.
Обновление: протестировано на MyFaces 2.1.12 и, кажется, работает нормально, ошибка Мохарры?
1 ответ
Обойти эту ошибку можно было бы всегда использовать пользовательское выражение EL, и в нем вы можете сначала проверить, установлен атрибут родительского компонента или нет.