Я переношу некоторые композиты в пользовательские теги из-за проблем с производительностью. При использовании композитов все идентификаторы должным образом сгенерированы, но при использовании пользовательских тегов у меня есть дублируемое Id Exception, даже я создал пользовательское выражение EL для генерации нового идентификатора.Дублированный идентификатор в пользовательском теге JSF при вложенности тегов
После некоторых исследований, кажется, это потому, что атрибуты тегов наследуются при вложении тега:
<far:fcontainer name="**father1**" type="panel">
<far:fcontainer type="panel">
<far:fcontainer type="panel">child 3</farTag:fcontainer>
</far:fcontainer>
</far:fcontainer>
В этом примере первый fcontainer должен иметь идентификатор father1 и вложенные из них должны иметь ID генерируется, но это то, что у меня есть:
<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>
Это нормально? Есть ли обходной путь?
Проверено на Mojarra 2.1.26.
Заранее спасибо.
Обновление: проверено на MyFaces 2.1.12 и, похоже, работает нормально, ошибка Mojarra?
В MyFaces было большое исправление алгоритма генерации идентификатора, чтобы сделать его более предсказуемым и уникальным и тем самым более стабильным. Это долгая история, там много тяжелой работы, но, на мой взгляд, это лучшее решение этой проблемы. Кажется, что у Mojarra все еще есть старый алгоритм 1.1.x, и я полагаю, что synthom, который вы видите в Mojarra, вызван, чем в MyFaces 2.2.x, было обнаружено несколько важных недостатков этого алгоритма, и помните, что код Facelets был пожертвован MyFaces тоже , поэтому обе реализации изначально использовали один и тот же код. – lu4242
Вы можете связать некоторое слово перед сгенерированным тегом? ты это пробовал? –