Дублирующийся идентификатор с учетом итераций и составных компонентов - PullRequest
0 голосов
/ 12 февраля 2019

У меня странная ошибка, которая иногда случается, и я не могу понять, что происходит не так.Я получаю следующую ошибку:

Идентификатор компонента 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 :.enter image description here

Сначала эта страница отображается нормально (с идентификаторами, показанными выше), но когда я делаю 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>

, тогда он работает нормально.

...