Дублированный идентификатор в пользовательском теге 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, и в нем вы можете сначала проверить, установлен атрибут родительского компонента или нет.

Другие вопросы по тегам