Component ID form:j_id96 has already been found in the view.

Component ID form:j_id96 has already been found in the view.

Duplicate component ID form:j_id96 found in view

A tela de um sistema que estou trabalhando começou a apresentar um erro de componente com ID duplicado. Estou utilizando JSF com Tomahawk e o código que estava apresentando problema era referente à paginação, utilizando a TAG t:dataScroller, conforme o trecho de código abaixo:

...
<h:panelGroup rendered="#{not empty lista}">
	<div class="paginacao">
		<t:dataScroller id="#{id}" for="#{idTabela}" paginator="true"
			binding="#{binding}"
			renderFacetsIfSinglePage="false"
			paginatorRenderLinkForActive="false">
				<f:facet name="first">Primeira</f:facet>
				<f:facet name="previous">Anterior</f:facet>
				<f:facet name="next">Próxima</f:facet>
				<f:facet name="last">Última</f:facet>
		</t:dataScroller>
	</div>
</h:panelGroup>
...

A mensagem da exceção é muito clara, existe mais de um componente definido com o mesmo atributo ID. O problema é que eu não estou definindo IDs para os elementos que estão apresentando problema, portando, a geração de IDs está sendo automática, de forma dinâmica, pelo próprio JSF/Tomahawk.

Segue a exceção:

Mai 25, 2012 11:33:55 AM com.sun.faces.application.StateManagerImpl checkIdUniqueness
Grave: JSF1007: Duplicate component ID form:j_id96 found in view.
Mai 25, 2012 11:33:55 AM com.sun.facelets.FaceletViewHandler handleRenderException
Grave: Error Rendering View[/pages/****.xhtml]
java.lang.IllegalStateException: Component ID form:j_id96 has already been found in the view.  See below for details.
...
+id: j_id94
 type: com.sun.facelets.tag.ui.ComponentRef@16ccb83
  +id: j_id95
   type: javax.faces.component.html.HtmlPanelGroup@1a53666
    +id: j_id96
     type: 
      <div class="paginacao">
    +id: idPaginadorServidores
     type: br.gov.dataprev.sisage.web.component.html.HtmlDataScroller@1969398
      +id: j_id96
       type: Última
      +id: j_id94
       type: Anterior
      +id: j_id93
       type: Primeira
      +id: j_id95
       type: Próxima
    +id: j_id97
     type: 
      </div>
...

Para resolver esse problema, bastou eu adicionar a TAG h:outputText nos valores dos facets do componente dataScroller. Não sei muito bem o motivo de essa alteração resolver o problema, mas, no meu caso, solucionou – via tentativa-e-erro.

Veja como ficou o código mostrado anteriormente:

...
<h:panelGroup rendered="#{not empty lista}">
	<div class="paginacao">
		<t:dataScroller id="#{id}" for="#{idTabela}" paginator="true"
			binding="#{binding}"
			renderFacetsIfSinglePage="false"
			paginatorRenderLinkForActive="false">
				<f:facet name="first" id="first"> <h:outputText id="#{id}primeira" value="Primeira"/></f:facet>
				<f:facet name="previous" id="previous"><h:outputText id="#{id}anterior" value="Anterior"/></f:facet>
				<f:facet name="next" id="next"><h:outputText id="#{id}proxima" value="Próxima"/></f:facet>
				<f:facet name="last" id="last"><h:outputText id="#{id}ultima" value="Última"/></f:facet>
		</t:dataScroller>
	</div>
</h:panelGroup>
...

Encontrei algumas pessoas relatando esse mesmo erro, mas referente a inclusão de um elemento do JSF que já foi criado anteriormente, para esses casos, a solução pode estar relacionada com o escopo do bean, mas essa é outra situação.

Se alguém souber o motivo ou tiver alguma outra solução, favor compartilhar.

Boa sorte.

19 Replies to “Component ID form:j_id96 has already been found in the view.”

  1. Ocorreu novamente o mesmo erro, sendo que agora em uma tag t:column. O problema estava que a subtag f:facet estava com o valor “solto”, sem nenhuma tag h:outputText, assim:


    <f:facet name="header">Descrição</f:facet>

    Incluí o h:outputText e funcionou, ficando assim:


    <f:facet name="header"><h:outputText value="Detalhar"/></f:facet>

Deixe uma resposta

O seu endereço de e-mail não será publicado.