Неправильное соединение JSF 2 ID

Ситуация

JavaServer Faces Версия: 2.1.6

Я получил родительский составной компонент с двумя вложенными cc. Одна из них содержит HtmlPanelGroup, которая имеет привязку к компоненту. Я использую эту привязку для программного добавления HtmlCommandLink-Objects в HtmlPanelGroup.

Позвольте называть некоторые идентификаторы:

  • PARENT для родителя cc
  • CHILD_FIRST для первого дочернего cc, вложенного в PARENT
  • CHILD_SECOND для второго дочернего cc, вложенного в PARENT
  • GROUP для PanelGroup, вложенной в CHILD_SECOND
  • LINK_1 для первого объекта HtmlCommandLink-объекта, прогаммически добавленного в группу GROUP

Expectation

Я ожидаю следующее цепочку ID (с по умолчанию javax.faces.SEPARATOR_CHAR):

PARENT (Composite Component, declarative)
  PARENT:CHILD_FIRST (Composite Component, declarative)
  PARENT:CHILD_SECOND (Component Component, declarative)
    PARENT:CHILD_SECOND:GROUP (HtmlPanelGroup, declarative)
      PARENT:CHILD_SECOND:GROUP:LINK_1 (HtmlCommandLink, programmatically)

Проблема

Идентификатор объекта HtmlCommandLink-Object ошибочен при первом посещении страницы. Вместо "PARENT: CHILD_SECOND: GROUP: LINK_1" идентификатор только "CHILD_SECOND: GROUP: LINK_1". После обновления страницы идентификатор будет правильно "PARENT: CHILD_SECOND: GROUP: LINK_1". Фактически, каждый компонент во втором составном компоненте ( "CHILD_SECOND" ) пропускает первую часть идентификатора ( "PARENT" ). После обновления все идентификаторы указаны правильно.

Решение

Я могу автоматически обновлять страницу после первого посещения. Но я не хочу.

Ответ 1

идентификатор после интерпретации браузером не нравится, что вы думали. насколько я знаю, он не превышает 3 уровней. Например:

 <h:form id="form">
    <h:panel id="panel">
        <h:panel id="panel1">
            <h:label id="lab"/>
        </h:panel>
        <h:panel id="panel2">
        </h:panel>    
    </h:panel>
</h:form>

тогда идентификатор метки не будет отображаться: panel: panel1: lab, но form: panel: lab. если виджет, который вы хотите получить, будет более глубоким, то я не могу сказать, но он не будет превышать 3 уровня. я могу рассказать вам, как найти идентификатор.  вы можете просто написать страницу, а затем просмотреть ее на хроме или firefox, где вы можете увидеть исходный код после интерпретации. поэтому вы можете получить желаемый идентификатор.

Удачи!