O que fazer para nao acontecer isso. duplicate Id for a component

11 respostas
D

Pessoal
como vcs fazem nesse caso igual o meu

tenho um simples dataTable, que em cada registro é gerado um botao de excluir ao lado..

public String excluirRegistroLista() throws PersistenceException{
		
		pessoaFacade.excluirRegistroLista(pessoaSelecionada);
			
		return  "reloadLista";
	
	}

o método excluir funciona normalmente, ele exclui o objeto e atualiza o dataTable para o registro sumir..
so pq quando ele da o return (reloadLista) que chama a mesma pagina..
aconte isso

java.lang.IllegalStateException: duplicate Id for a component j_id_jsp_1450790503_1:col:j_id1
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:68)
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92)
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92)
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:78)
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92)
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92)
	at org.ajax4jsf.application.TreeStructureNode.apply(TreeStructureNode.java:92)
	at org.ajax4jsf.application.AjaxStateManager.getTreeStructureToSave(AjaxStateManager.java:187)
	at org.ajax4jsf.application.AjaxStateManager.buildViewState(AjaxStateManager.java:473)
	at org.ajax4jsf.application.AjaxStateManager.saveView(AjaxStateManager.java:437)
	at com.sun.faces.application.ViewHandlerImpl$WriteBehindStateWriter.flushToWriter(ViewHandlerImpl.java:930)
	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:205)
	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)

como resolver isso?
ha outro jeito de da reload no dataTable ?

11 Respostas

Y

Poderia postar o código da sua JSP?

D
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<LINK href="../css/design.css" type="text/css" rel="stylesheet">
</head>
<body>
	<f:view>
		<a4j:form>
			<center>  					 
					<f:facet name="header">
						<h:outputText value="Lista de Usuarios Cadastrados"></h:outputText>
					</f:facet>
					<hr>
					<br>
					<a4j:outputPanel ajaxRendered="true">
						<rich:datascroller for="col" maxPages="20" />    
					    <rich:spacer height="30" />  
						<rich:dataTable width="300" id="col" rows="10" columnClasses="col" value="#{pessoaBean.allPessoa}" binding="#{pessoaBean.dataTable}" var="pessoa" styleClass="estilo" headerClass="cabecalho" rowClasses="ulimo,primeiro">
											
												
							<f:facet name="header">
								 <rich:columnGroup>  
									<rich:column>  
				                   		 <b><h:outputText styleClass="headerText" value="NOME" /></b>
				   	                </rich:column>  				            
				                    <rich:column>  
				                   		 <b><h:outputText styleClass="headerText" value="CACHORRO" /></b>				                   		
				                    </rich:column>  	
				                    <rich:column>  
				                   		 <b><h:outputText styleClass="headerText" value="RAÇÃO" /></b>				                   		
				                    </rich:column>  	
				                   	<rich:column>  
				                   		 <b><h:outputText styleClass="headerText" value="AÇÃO" /></b>				                   		
				                    </rich:column>  		                  
				                 </rich:columnGroup>
				            </f:facet>
									   																			
							<rich:subTable value = "#{pessoa.racaoCachorro}" var= "subObjeto"> 
					   			<rich:columnGroup>  
						   			<rich:column> 
										<h:outputText value="#{pessoa.nome}" />
									</rich:column>			
									
									<rich:column> 
										<h:outputText value="#{pessoa.cachorroPessoa.nomeCachorro}" />
									</rich:column>	
						   			
						   			<rich:column>			 	
							   			<h:outputText value="#{subObjeto.nomeRacao}" />
							   		</rich:column>	
							   		
							   		<rich:column>			 	
							   			<a4j:commandButton value = 'X' action="#{pessoaBean.excluirRegistroLista}"/>
							   			<a4j:commandButton value = '-' action="#{pessoaBean.editRegistro}"/>
							   		</rich:column>	
						   		</rich:columnGroup>
				   			</rich:subTable>
				   							   						
						</rich:dataTable>
				</a4j:outputPanel>
				<br>
				<hr>
			<a4j:commandButton value="Novo" action="#{pessoaBean.novaPessoa}" />
			</center>
		</a4j:form>
	</f:view>
</body>
</html>
Y

Tente isso:

//Mude a declaração do outputPanel
<a4j:outputPanel ajaxRendered="true" id="painelPrincipal">

//E adicione o reRender no commandButton 
<a4j:commandButton value = 'X' action="#{pessoaBean.excluirRegistroLista}" reRender="painelPrincipal"/>

[]´s

Daniel

D
javax.servlet.ServletException: duplicate Id for a component j_id_jsp_1450790503_1:col:j_id1
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
	com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
	com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)

nao foi
=|

Y

Bom, você pode mudar o commandLink para JSF puro, dai você garante a recarga da página.
Assim:

<h:commandButton value = 'X' action="#{pessoaBean.excluirRegistroLista}"/>

[]´s

Daniel

D

nada cara
mudei todos a4j para h, inclusive o form
mais nao foi
nao entendo, pode ter alguma coisa a ver com a lista do dataTable?

S

troca seu datatable pelo rich:scrolldatatable e tira o rich:datascroller porque voce nao vai mais precisar dele. :slight_smile: não precisa colocar mais os ids … só se você precisar .

S

ops me precipitei falei besteira…esqueci que o componente era diferente.

mais faz o seguinite no seu metodo richscroller coloca um id, e coloca um page="{bean}"

F

Fala Deluxe blz?
Cara tivemos problemas parecido por aqui, a solução foi colocar id em todos os componentes, no começo é chato mas depois vira hábito :lol:

Abraços!

D

nao conseguir ainda
oq seria esse bean no datascroller ?

D

Srs, sei que o post é meio antigo, mas recentemente tive o mesmo problema, que me atormentou bastante, e acredito ter achado a resposta.

O problema é com o uso do “binding”. Isso mesmo!! O “binding” que está sendo utilizado para recuperar o objeto Java do componente “rich:dataTable”.

Não sei o porquê exatamente, mas quando guardamos o objeto do componente em sessão utilizando o binding (meu caso), a implementação do JSF se perde com o contador de IDs únicos dos componentes. Acredito que, ao tentar reconstruir a árvore de componentes, o nosso objeto guardado em sessão pelo binding atrapalha os contadores de IDs ou não é considerado por este.

Experimente retirar o atributo binding do objeto rich:dataTable. Acho que vai funcionar!..

Criado 16 de abril de 2009
Ultima resposta 24 de set. de 2010
Respostas 11
Participantes 5