Problemas com PrimeFaces[RESOLVIDO]

8 respostas
T

Olá pessoal,

Eu estou desenvolvendo um pequeno CRUD com HIBERNATE4.1+SPRING3.1+JSF2.0 + Primefaces. Infelizmente quando eu roda a aplicacao ocorre o seguinte rro:

[color=red]Cannot find component with identifier “usuarioForm” in view.

viewId=/usuario.xhtml
location=C:\Users\Fabriq\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\SpringWebApp\usuario.xhtml
phaseId=RENDER_RESPONSE(6)

Caused by:
javax.faces.FacesException - Cannot find component with identifier “usuarioForm” in view.
at org.primefaces.util.ComponentUtils.findClientIds(ComponentUtils.java:249)[/color]

segue o usuario.xhtml:

[color=green]

<h:head>
JSF2+ Hibernate4 + Spring 3
</h:head>

<h:body>

<f:view>

<h:form id=usuarioForm>



<p:panel id=painelCadastro header=Cadastrar novo Usuario

style=text-align:left; width:700px;>
<h:panelGrid columns="2">

					<h:outputLabel value="Nome" />
					<h:inputText id="nomeUsuario"
						value="#{usuarioController.usuario.nome}" size="45" />

					<h:outputLabel value="Email" />
					<h:inputText id="emailUsuario"
						value="#{usuarioController.usuario.email}" sizze="45" />

				</h:panelGrid>

				<br />

				<center>
					<p:commandButton value="Gravar"
						action="#{usuarioController.gravar}"
						update="painelConsulta,painelCadastro" />
					<p:commandButton type="reset" value="Limpar" />
				</center>

			</p:panel>

			<br /> <br />

			<!-- Lista de Usuarios-->
			<p:panel id="painelConsulta" header="Lista de usuarios cadastrados"
				style="text-align:left;width:700px;">

				<p:dataTable value="#{usuarioController.listaUsuarios}" id="tabela"
					emptyMessage="Nenhum registro encontrado" rowIndexVar="var"
					paginator="true" paginatorPosition="bottom"
					firstPageLinkLabel="Primeira" previousPageLinkLabel="Anterior"
					nextPageLinkLabel="Proxima" lastPageLinkLabel="ultima" rows="10"
					var="usuario" width="600">
					<p:column>
						<f:facet name="header">
							<h:outputText value="ID" />
						</f:facet>
						<h:outputText value="#{usuario.id}" styleClass="letra1" />
					</p:column>

					<p:column>
						<f:facet name="header">
							<h:outputText value="Nome" />
						</f:facet>
						<h:outputText value="#{usuario.nome}" styleClass="letra1" />
					</p:column>

					<p:column>
						<f:facet name="header">
							<h:outputText value="Email" />
						</f:facet>
						<h:outputText value="#{usuario.email}" styleClass="letra1" />
					</p:column>
					
					<p:column>
						<p:commandButton value="alterar" update="usuarioForm">
							<!-- What?  -->
							<f:setPropertyActionListener
								target="#{usuarioController.usuario}" value="#{usuario}" />
						</p:commandButton>
					</p:column>

					<p:column>
						<p:commandButton value="excluir" update="usuarioForm"
							action="usuarioController.excluir">
							<f:setPropertyActionListener
								target="#{usuarioController.usuario}" value="#{usuario}" />
						</p:commandButton>

					</p:column>
					
				</p:dataTable>
			</p:panel>

		</center>
	</h:form>
</f:view>

</h:body>

[/color]

Aguém pode me ajudar?

8 Respostas

Rodrigo_Sasaki

Ja tentou dar um clean no servidor? pode ter ocorrido algum erro durante o deploy.

G

Ali onde vc faz update=“usuarioForm”, tente update=":usuarioForm"

T

Já dei vários cleans no projeto…

T

geraldo.vec deu certo!!! ou pelo menos o alterar…

o erro parou, mas o button excluir não funciona…DD:

eu ainda não entendi o por quê do “:”…pelo menos funcionou…vc poderia me explicar???

G

Na verdade eu não sei explicar o pq disso, na versão 2 do primefaces não era necessário o “:”, alguém ai saberia explicar?

ErickRAR

É algo relacionado a isso: http://stackoverflow.com/questions/3972653/jsf-why-prependid-false-in-a-form

Rodrigo_Sasaki

Isso está relacionado a NamingContainers.

Existe um detalhe quando você quer referenciar um elemento filho de um outro NamingContainer, que não seja o Container seu próprio componente.

No caso o form é um NamingContainer, e a DataTable também, porém o CommandButton tem como primeiro ancestral a DataTable, portanto se o caractere separador não for especificado, ele buscará da DataTable para baixo.

o caractere separador : indica que a busca pelo id deve ser iniciada no UIComponent base da sua árvore de componentes, caso você não o especifique, a busca tomará como base, o primeiro NamingContainer ancestral do seu componente, no caso a sua p:dataTable.

E como seu usuarioForm não está nesse NamingContainer, está acima, ele não o encontrou.

Obs: isso não é particularidade do PrimeFaces, e sim do JSF.

Se quiser entender mais como é feita essa busca por Id, leia sobre o método findComponent.

T

Obrigada a ajuda pessoal!!! :smiley:

Criado 6 de julho de 2012
Ultima resposta 6 de jul. de 2012
Respostas 8
Participantes 4