Неправильное соединение 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, где вы можете увидеть исходный код после интерпретации. поэтому вы можете получить желаемый идентификатор.
Удачи!