ID do componente duplicado no JSF usando o componente composto duas vezes em exibição

Eu "herdei" um aplicativo JSF 2 (JSF 2.2.7) na minha empresa e enfrentei um java.lang.IllegalStateException porque dois componentes parecem ter o mesmo ID.

A estrutura da exibição é a seguinte (extraí o código relevante para fins de ilustração, ele pode conter alguns erros de digitação / sintaxe inválida ao alterar alguns nomes):

<p:commandButton id="editButton"
   action="#{controller.prepareItem()}"
   update=":itemEditDlg" oncomplete="PF('itemtEditDlg').show()" />


<comp:editItemDlg id="itemEditDlg"  />

<p:dialog id="anotherDlg" >
   <h:form id="anotherForm">
      <c:forEach items="#{controller.allArgs}" var="arg" >
         <!-- next line is the problem -->
         <comp:mycomponent arg="#{arg}"  />
      </c:forEach>
   </h:form>
</p:dialog>

mycomponent.xhtml tem a seguinte aparência:

<cc:interface>
    <cc:attribute name="arg" required="true" />
</cc:interface>
<cc:implementation>
    <p:inputText id="argValue" value="#{cc.attrs.arg}" />
    <p:message id="argValueMessage" for="argValue" />
</cc:implementation>

Importante: O componente mycomponent também é usado dentro de editItemDlg (da mesma maneira que em "anotherDlg"), ou seja, dentro de uma caixa de diálogo e forEach-loop

Se eu clicar no botão edit, recebo:

java.lang.IllegalArgumentException: Component ID anotherForm:j_idt192:argValue  
has already been found in the view.

É bastante estranho, porque o "anotherDlg" não é aberto neste caso, mas aparentemente já foi renderizado.

Recebo as seguintes informações no StackTrace (apenas as partes relevantes mostradas):

         +id: j_idt192
             type: javax.faces.component.UINamingContainer@399bd0dc
              +id: j_id2
               type: javax.faces.component.UIPanel@24ad3910
                +id: argValue  <===============
                 type: org.primefaces.component.inputtext.InputText@687d5c3f
                +id: argValueMessage
                 type: org.primefaces.component.message.Message@7e3361b0
                +id: argValue  <===============
                 type: org.primefaces.component.inputtext.InputText@5f52aa8a
                +id: argValueMessage
                 type: org.primefaces.component.message.Message@2c3a7aea

Então, de alguma forma, esses componentes são renderizados duas vezes, mas não consigo entender o porquê.

Eu fui atravésEntão responde mas não consigo determinar qual das causas listadas é o problema no meu caso. Eu não uso nenhuma ligação.

O que eu tentei até agora: brinquei com a definição de identificação de forma explícita, ou seja, ao redor do meu componente, passando contadores de loop como identificação para o componente etc. sem sucesso. Eu acho que o problema não pode ser resolvido dentro do meu componente. A única solução alternativa que encontrei foi fazer uma cópia física do meu componente e fazer referência a essa cópia no meu anotherForm (de modo que editItemDlg e anotherDlg não usem os mesmos componentes).

Qualquer ajuda é apreciada

questionAnswers(2)

yourAnswerToTheQuestion