Utilizando o DataTable do RichFaces em uma simples página, após um reload na página sempre era retornado o seguinte erro:
Duplicate component ID '_id0:_dataTable:_id1' found in view.
Segue abaixo o código da página que causava o erro:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="https://ajax4jsf.dev.java.net/ajax" xmlns:rich="http://richfaces.ajax4jsf.org/rich"> <h:form binding="#{UserConsultPage.component}"> <rich:dataTable id="dataTable" binding="#{UserConsultPage.dataTable}" var="item"> <rich:column> <f:facet name="header"> <h:outputText value="Name" /> </f:facet> <h:outputText value="#{item.name}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Email" /> </f:facet> <h:outputText value="#{item.email}" /> </rich:column> </rich:dataTable> <h:commandButton id="btnLoad" actionListener="#{UserConsultPage.load}" /> </h:form> </ui:composition>
A solução foi colocar id’s em todos os componentes “outputText”. Segue abaixo a página modificada:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="https://ajax4jsf.dev.java.net/ajax" xmlns:rich="http://richfaces.ajax4jsf.org/rich"> <h:form binding="#{UserConsultPage.component}"> <rich:dataTable id="dataTable" binding="#{UserConsultPage.dataTable}" var="item"> <rich:column> <f:facet name="header"> <h:outputText id="headerNameValue" value="Name" /> </f:facet> <h:outputText id="nameValue" value="#{item.name}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText id="headerEmailValue" value="Email" /> </f:facet> <h:outputText id="emailValue" value="#{item.email}" /> </rich:column> </rich:dataTable> <h:commandButton id="btnLoad" actionListener="#{UserConsultPage.load}" /> </h:form> </ui:composition>