Ajuda com erro de id no JSF

3 respostas
V

Olá a todos.
Estou criando minha primeira aplicação com JSF, e estou batendo cabeça aqui para criar um formulário de cadastro de cliente estou recebendo esse erro:

"A ID de componente formCadastro já foi encontrada na visualização." Esse é o Stack Trace:
java.lang.IllegalStateException: A ID de componente formCadastro  foi encontrada na visualização.
	at com.sun.faces.util.Util.checkIdUniqueness(Util.java:821)
	at com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
	at com.sun.faces.application.view.StateManagementStrategyImpl.saveView(StateManagementStrategyImpl.java:140)
	at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:133)
	at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:619)
E esse é o form:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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">

<ui:composition template="/templates/interna.xhtml">

	<ui:define name="titulo">
    	Cadastro de Clientes
	<h:form id="formCadastro">
			<h:messages />
			<h:inputHidden value="#{clienteBean.cliente.idCliente}" />
			<h:panelGrid columns="2">
				<h:outputLabel value="Nome Cliente:" for="nmEmpresa" />
				<h:inputText id="nmEmpresa" label="Nome Cliente"
					value="#{clienteBean.cliente.nmEmpresa}" size="30" maxlength="30"
					required="true" requiredMessage="Cliente deve possuir um nome.">
					<f:validateLength minimum="10" maximum="30" />
				</h:inputText>

				<h:outputLabel value="Data Início da Licença:" for="dtIniLicenca" />
				<h:inputText id="dtIniLicenca" label="Data Início da Licença"
					value="#{clienteBean.cliente.dtIniLicenca}" size="10"
					maxlength="10" required="true">
					<f:convertDateTime dateStyle="medium" />
				</h:inputText>

				<h:outputLabel value="Data Final da Licença:" for="dtFimLicenca" />
				<h:inputText id="dtFimLicenca" label="Data Final da Licença"
					value="#{clienteBean.cliente.dtFimLicenca}" size="10"
					maxlength="10" required="true">
					<f:convertDateTime dateStyle="medium" />
				</h:inputText>
			</h:panelGrid>
			<h:commandButton action="#{usuarioBean.salvar}" value="Salvar" />
		</h:form>
	</ui:define>
</ui:composition>
</html>

Qualquer dica ficaria feliz já.

3 Respostas

Hebert_Coelho

Faça uma procura em seu código pela palavra formCadastro.

Você vai ver que ele está sendo utilizado em algum lugar. E esses dois ids estão sendo exibidos na mesma tela.

Como não pode ter id repetido, o JSF dá mensagem de erro.

A

Confere no teu template (/templates/interna.xhtml) se não tem nenhum componente seu com o id formCadastro, é provavelmente lá que está o componente com o mesmo id e ocasionando o erro

V

Então a primeira coisa que tentei foi mudar o id antes era cadastro apenas ai mudei para formCadastro.

Aqui esta os meus outros arquivos:

interna.xhtml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets">
<!-- (1) -->
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title><ui:insert name="titulo">Plano Integrado WEB</ui:insert></title> <!-- (2) -->
	<h:outputStylesheet library="css" name="estilo.css"/>
	<style type="text/css"><!--
	#logotipo {
		text-align: right; 
		float: right;
	} -->
    </style>
</h:head>
<h:body>
	<div id="container">
		<div id="titulo">
			<ui:insert name="titulo">Plano Integrado WEB</ui:insert><!-- (4) -->  
		</div>
		<div id="logotipo">
			<h:graphicImage library="imagens" name="logotipo_m.png"/>
		</div>
		<div id="barra_menu">
	    	<ui:insert name="barra_menu">
	    		<ui:include src="/restrito/menu_sistema.xhtml"/>
	   		</ui:insert>  
		</div>
		<div id="corpo">
			<ui:insert name="corpo"/>
		</div>
		<div id="rodape">
	    	<ui:insert name="rodape">
	    		<ui:include src="/publico/rodape.xhtml"/>
	    	</ui:insert> 
		</div>
	</div>
</h:body>
</html>
principal.xhtml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title><ui:insert name="titulo">Plano Integrado WEB</ui:insert></title>
	<h:outputStylesheet library="css" name="estilo.css" />
	<style type="text/css">
<!--
#logotipo {
	text-align: center;
}
-->
</style>
</h:head>
<h:body>
	<div id="container">
		<div id="logotipo">
			<h:graphicImage library="imagens" name="logotipo_g.png" />
		</div>
		<div id="barra_menu">
			<ui:insert name="barra_menu">
				<ui:include src="/restrito/menu_sistema.xhtml" />
			</ui:insert>
		</div>
		<div id="corpo">
			<ui:insert name="corpo" />
		</div>
		<div id="rodape">
			<ui:insert name="rodape">
				<ui:include src="/publico/rodape.xhtml" />
			</ui:insert>
		</div>
	</div>
</h:body>
</html>

Não encontrei mais nada de id, esse modelo peguei como base num livro que comprei, apenas troquei os campos e as entidades para se adequar ao meu projeto.

Essa classe aqui era o xhml original do livro:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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">
	
<ui:composition template="/templates/interna.xhtml">

	<ui:define name="titulo">
    	Cadastro de Usuários
	</ui:define>

	<ui:define name="corpo">
		<h:form id="cadastro">
			<h:messages/>
			<h:inputHidden value="#{usuarioBean.usuario.codigo}"/>
			<h:inputHidden value="#{usuarioBean.usuario.ativo}"/>
			<h:inputHidden value="#{usuarioBean.destinoSalvar}"/>
			
			<h:panelGrid columns="2">
				<h:outputLabel value="Nome:" for="nome"/>
				<h:inputText id="nome" label="Nome" value="#{usuarioBean.usuario.nome}" size="30" maxlength="30" required="true" requiredMessage="Você não tem nome?">
					<f:validateLength minimum="10" maximum="30"/>
				</h:inputText>
				
				<h:outputLabel value="Data Nascimento:" for="data"/>
				<h:inputText id="data" label="Data Nascimento" value="#{usuarioBean.usuario.nascimento}" size="10" maxlength="10" required="true">
					<f:convertDateTime dateStyle="medium"/>
				</h:inputText>
				
				<h:outputLabel value="Celular:" for="celular"/>
				<h:inputText id="celular" label="Celular" value="#{usuarioBean.usuario.celular}" size="10"/>
				
				<h:outputLabel value="e-Mail:" for="email"/>
				<h:panelGroup>
					<h:inputText id="email" 
						label="e-Mail" 
						value="#{usuarioBean.usuario.email}" 
						size="50" maxlength="50" required="true" 
						validatorMessage="e-Mail inválido">
						<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+"/>
					</h:inputText>
					<h:message for="email"/> 
				</h:panelGroup>
				
				<h:outputLabel value="Idioma:" for="idioma"/>
				<h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}">
					<f:selectItem itemValue="pt_BR" itemLabel="Português"/>
					<f:selectItem itemValue="en_US" itemLabel="English"/>
					<f:selectItem itemValue="es_ES" itemLabel="Espanol"/>
				</h:selectOneMenu>
				
				<h:outputLabel value="Login:" for="login"/>
				<h:inputText id="login" 
				             label="Login" 
				             value="#{usuarioBean.usuario.login}" 
				             size="15" maxlength="15" required="true"
				             validatorMessage="Login deve ter no mínimo 5 e no máximo 15 caracters e só pode ter os simbolos '.' e '_'.">
					<f:validateRegex pattern="([a-z]|[0-9]|[.]|[_]){5,15}"/>
				</h:inputText>
	
				<h:outputLabel value="Senha:" for="senha"/>
				<h:inputSecret id="senha" label="Senha" value="#{usuarioBean.usuario.senha}" size="10" maxlength="10" required="true" redisplay="true"/>
				
				<h:outputLabel value="Confirmar Senha:" for="confirmarsenha"/>
				<h:inputSecret id="confirmarsenha" label="Confirmar Senha" value="#{usuarioBean.confirmarSenha}" size="10" maxlength="10" required="true" redisplay="true"/>
			</h:panelGrid>
			
			<h:panelGroup rendered="#{empty contextoBean.usuarioLogado}">
				<fieldset><legend>Conta Inicial</legend>
				<h:panelGrid columns="2">
					<h:outputLabel value="Descrição: " for="descricao" />
					<h:inputText id="descricao" label="Descrição" value="#{usuarioBean.conta.descricao}" required="true" maxlength="45" />
	
					<h:outputLabel value="Saldo Inicial: " for="saldoInicial" />
					<h:inputText id="saldoInicial" value="#{usuarioBean.conta.saldoInicial}" size="10">
						<f:convertNumber minFractionDigits="2" />
					</h:inputText>
				</h:panelGrid>
				</fieldset>
			</h:panelGroup>
						
			<h:commandButton action="#{usuarioBean.salvar}" value="Salvar"/>
		</h:form>
	</ui:define>
</ui:composition>
</html>
Criado 31 de maio de 2012
Ultima resposta 31 de mai. de 2012
Respostas 3
Participantes 3