2013-10-07 5 views
2

Я переношу некоторые композиты в пользовательские теги из-за проблем с производительностью. При использовании композитов все идентификаторы должным образом сгенерированы, но при использовании пользовательских тегов у меня есть дублируемое 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?

+1

В MyFaces было большое исправление алгоритма генерации идентификатора, чтобы сделать его более предсказуемым и уникальным и тем самым более стабильным. Это долгая история, там много тяжелой работы, но, на мой взгляд, это лучшее решение этой проблемы. Кажется, что у Mojarra все еще есть старый алгоритм 1.1.x, и я полагаю, что synthom, который вы видите в Mojarra, вызван, чем в MyFaces 2.2.x, было обнаружено несколько важных недостатков этого алгоритма, и помните, что код Facelets был пожертвован MyFaces тоже , поэтому обе реализации изначально использовали один и тот же код. – lu4242

+0

Вы можете связать некоторое слово перед сгенерированным тегом? ты это пробовал? –

ответ

0

Обходной путь к этой ошибке заключается в том, чтобы всегда использовать пользовательское выражение EL, и в нем вы можете сначала проверить, имеет ли родительский компонент атрибут или нет.

 Смежные вопросы

  • Нет связанных вопросов^_^