У меня странная ошибка, которая иногда случается, и я не могу понять, что происходит не так.Я получаю следующую ошибку:
Идентификатор компонента form_lpm: PODports: PODlocalChargeTable: j_idt1665: j_idt1667: chargeDiv уже был найден в представлении.
Хорошо, мы все знаем, чтоВы не можете иметь дубликаты идентификаторов в JSF, но этот идентификатор на самом деле не существует!У меня есть что-то вроде этого:
<ui:repeat id="PODport">
<p:dataTable id="PODlocalChargeTable">
<p:columns>
<my:compositeComp/>
</p:columns>
</p:dataTable>
</ui:repeat>
Композитный компонент (мой: композитныйКомпьютер) имеет идентификатор chargeDiv там.Таким образом, в сообщении об ошибке j_idt1665 - это динамический идентификатор для итерации p: columns, а j_idt1667 - идентификатор составного компонента.
Однако в фактическом сгенерированном HTML мы получаем эти идентификаторы (как и следовало ожидать): ЗеленыйСчетчик предназначен для пользовательского интерфейса: repeat, синий для dataTable, а оранжевый - для столбцов p :.
Сначала эта страница отображается нормально (с идентификаторами, показанными выше), но когда я делаю ajax-запрос и обновляю форму, я получаю сообщение об ошибке с повторяющимся идентификатором.Странно то, что счетчики удалены из этого идентификатора.Почему это так и что я могу сделать?
Я попытался указать идентификаторы для p: columns (dynCol) и составного компонента (compId), и, что интересно, теперь я получаю почти такую же ошибку, но один изсчетчики все еще находятся в ID:
<ui:repeat id="PODport">
<p:dataTable id="PODlocalChargeTable">
<p:columns id="dynCol">
<my:compositeComp id="compId"/>
</p:columns>
</p:dataTable>
</ui:repeat>
Идентификатор компонента form_lpm: PODports: PODlocalChargeTable: dynCol: 2: compId: chargeDiv уже был найден в представлении
У меня была проблема с двумя разными составными компонентами.Компоненты были в основном примерно такими:
<p:outputPanel id="chargeDiv">
content
</p:outputPanel>
<p:tooltip for="chargeDiv">
tooltip content
</p:tooltip>
Я использую JSF 2.1 (Mojarra 2.1.29-08) и Primefaces 6.1.18
Обновление: Я провел немного больше испытаний, и это определенно связано с использованием составных компонентов.Если у меня есть очень простой составной компонент:
<cc:implementation>
<p:outputPanel id="chargeDiv">
</p:outputPanel>
</cc:implementation>
, и у меня есть динамические столбцы, такие как
<p:columns var="myvar" value="#{bean.list}" id="dynCol">
<my:compositeComp/>
</p:columns>
, я получаю ошибку с повторяющимся идентификатором.Если я использую содержимое составного компонента непосредственно в столбцах p:
<p:columns var="myvar" value="#{bean.list}" id="dynCol">
<p:outputPanel id="chargeDiv">
content
</p:outputPanel>
</p:columns>
, тогда он работает нормально.