[RESOLVIDO]Não encontra ID do componente <p:dialog> no primefaces, será BUG?

Estou tentando acessar um <p:dialog> para exibir a tela de edição de usuário mas ele não está conseguindo acessar o componente… Já tentei de tudo pois vi que o Jeferson_Manetti já teve um problema parecido em outro post (http://www.guj.com.br/java/241279-resolvido-ajuda-com-pdialog-do-primefaces-resolvido) e tentei todas as soluções apontadas lá e nada, também procurei no dev team do projeto e nada… Vi algo que tem a ver (http://code.google.com/p/primefaces/issues/detail?id=3522) mas não é exatamente o que o outro cara aqui do GUJ teve e eu estou tendo.

Aqui está o código da página:

<!DOCTYPE html>
<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"
      xmlns:p="http://primefaces.org/ui">
    <body>
        <p:panel>
            <!-- FORM -->
            <h:form id="formUser">
                <p:commandButton id="cbAdicionar" icon="ui-icon-plus" title="Adicionar novo" value="Novo usuário">  
                    <f:setPropertyActionListener value="#{car}" target="#{tableBean.selectedCar}" />  
                </p:commandButton>  
                <p:spacer height="5" width="100%"/>

                <!-- TABELA DE LISTAGEM -->
                <p:dataTable id="dataTableUsuario" var="pessoa" value="#{pessoaMB.pessoas}" paginator="true" rows="5" 
                             rowsPerPageTemplate="5,10,20" emptyMessage="Nenhum elemento encontrado"
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} 
                             {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" style="text-align: center">
                    <f:facet name="header">
                        Lista de Usuários
                    </f:facet>
                    <p:column headerText="CPF">
                        <h:outputText value="#{pessoa.cpf}"/>
                    </p:column>
                    <p:column headerText="Nome">
                        <h:outputText value="#{pessoa.nome}"/>
                    </p:column>
                    <p:column headerText="Data de Nascimento">
                        <h:outputText value="#{pessoa.dataDeNascimento}">
                            <f:convertDateTime pattern="dd/MM/yyyy"/>
                        </h:outputText>
                    </p:column>
                    <p:column headerText="Login">
                        <h:outputText value="#{pessoa.login}"/>
                    </p:column>
                    <p:column headerText="Opções">
                        <p:commandButton update=":formUser:pEditar" process="@this" oncomplete="usuarioEditarDialog.show()" id="cbEditar" icon="ui-icon-pencil" title="Editar" style="margin-right: 5px;">
                            <f:setPropertyActionListener value="#{pessoa}" target="#{tabelaUsuarioMB.usuarioSelecionado}" />    
                        </p:commandButton>
                    </p:column>
                </p:dataTable>

                <!-- DIALOG DE EDIÇÃO -->
                <p:dialog header="Editar usuário" widgetVar="usuarioEditarDialog" resizable="false" id="usrEdit"
                          showEffect="clip" hideEffect="explode" modal="true" width="500" height="300">
                    <p:panel id="pEditar">
                        <h:panelGrid columns="2" style="margin:0 auto;">  
                            <f:facet name="header">  
                                <h:outputText value="teste"/>
                            </f:facet>  
                            <!-- PREENCHI APENAS COMO TESTE -->
                            <h:outputText value="Model:" />  
                            <h:outputText value="#{tabelaUsuarioMB.usuarioSelecionado.nome}" style="font-weight:bold"/>  
                            <h:outputText value="Year:" />  
                            <h:outputText value="teste"/>  
                            <h:outputText value="Manufacturer:" />  
                            <h:outputText value="teste"/>  
                            <h:outputText value="Color:" />  
                            <h:outputText value="teste"/>  
                        </h:panelGrid>
                    </p:panel>  
                </p:dialog>
            </h:form> 
        </p:panel>
    </body>
</html>

E aqui o trace:

Abr 04, 2012 11:32:26 AM com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit
Grave: javax.faces.FacesException: Cannot find component with identifier ":formUser:pEditar" in view.

Tô ficando maluco aqui com uma :evil: BESTEIRA :evil: dessas! Alguém se habilita?

Não seria update=“formUser:pEditar” ao invés de update=":formUser:pEditar"

É assim que sempre uso em páginas semelhantes e funciona corretamente.

Ele não ta encontrando pq seu form ta dentro de um panel. o panel em si já gera um id. Coloca um ID no panel e depois chame :panel:form:componente

Olá gomesrod e jakefrog, boa tarde. Bem tentei aqui ambas as formas de passar o id ( tanto “:formUser:pEditar” como “formUser:pEditar”) e nada.
Jakefrog, coloquei um id no panel principal e o erro persiste…

        <!-- MUDANÇA -->
        <p:panel id="mainPanel">
            <!-- FORM -->
            <h:form id="formUser">
                <p:commandButton id="cbAdicionar" icon="ui-icon-plus" title="Adicionar novo" value="Novo usuário">  
                    <f:setPropertyActionListener value="#{car}" target="#{tableBean.selectedCar}" />  
                </p:commandButton>  
                <p:spacer height="5" width="100%"/>

                <!-- TABELA DE LISTAGEM -->
                <p:dataTable id="dataTableUsuario" var="pessoa" value="#{pessoaMB.pessoas}" paginator="true" rows="5" 
                             rowsPerPageTemplate="5,10,20" emptyMessage="Nenhum elemento encontrado"
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} 
                             {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" style="text-align: center">
                    <f:facet name="header">
                        Lista de Usuários
                    </f:facet>
                    <p:column headerText="CPF">
                        <h:outputText value="#{pessoa.cpf}"/>
                    </p:column>
                    <p:column headerText="Nome">
                        <h:outputText value="#{pessoa.nome}"/>
                    </p:column>
                    <p:column headerText="Data de Nascimento">
                        <h:outputText value="#{pessoa.dataDeNascimento}">
                            <f:convertDateTime pattern="dd/MM/yyyy"/>
                        </h:outputText>
                    </p:column>
                    <p:column headerText="Login">
                        <h:outputText value="#{pessoa.login}"/>
                    </p:column>
                    <p:column headerText="Opções">
        <!-- MUDANÇA -->
                        <p:commandButton update=":mainPanel:formUser:pEditar" process="@this" oncomplete="usuarioEditarDialog.show()" id="cbEditar" icon="ui-icon-pencil" title="Editar" style="margin-right: 5px;">
                            <f:setPropertyActionListener value="#{pessoa}" target="#{tabelaUsuarioMB.usuarioSelecionado}" />    
                        </p:commandButton>
                    </p:column>
                </p:dataTable>

                <!-- DIALOG DE EDIÇÃO -->
                <p:dialog header="Editar usuário" widgetVar="usuarioEditarDialog" resizable="false" id="usrEdit"
                          showEffect="clip" hideEffect="explode" modal="true" width="500" height="300">
                    <p:panel id="pEditar">
                        <h:panelGrid columns="2" style="margin:0 auto;">  
                            <f:facet name="header">  
                                <h:outputText value="teste"/>
                            </f:facet>  
                            <h:outputText value="Model:" />  
                            <h:outputText value="#{tabelaUsuarioMB.usuarioSelecionado.nome}" style="font-weight:bold"/>  
                            <h:outputText value="Year:" />  
                            <h:outputText value="teste"/>  
                            <h:outputText value="Manufacturer:" />  
                            <h:outputText value="teste"/>  
                            <h:outputText value="Color:" />  
                            <h:outputText value="teste"/>  
                        </h:panelGrid>
                    </p:panel>  
                </p:dialog>
            </h:form> 
        </p:panel>
    </body>
</html>

E…

Abr 04, 2012 2:54:28 PM com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit
Grave: javax.faces.FacesException: Cannot find component with identifier ":mainPanel:formUser:pEditar" in view.

Tá osso viu! :evil:

Tente
:mainPanel:formUser:usrEdit:pEditar

:frowning:

Abr 04, 2012 3:42:40 PM com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit
Grave: javax.faces.FacesException: Cannot find component with identifier ":mainPanel:formUser:usrEdit:pEditar" in view.

Eu sinceramente NUNNNNNCA vi isso na minha vida! PQP, que dificuldade pra pegar um simples id! :x

Só deixando claro duas coisas…

1ª) Quando coloco a tag “update”, passando qualquer coisa, a tabela fica toda louca e travam as outras funções da tela. Quando retiro, tudo funciona normalmente

2ª) Esta página “cadastroUsuário.xhtml” está contida em uma outra página chamada “sistema.xhtml” na qual o facelets monta automáticamente… (Tem nada a ver né isso?)

Flw!

[quote]2ª) Esta página “cadastroUsuário.xhtml” está contida em uma outra página chamada “sistema.xhtml” na qual o facelets monta automáticamente… (Tem nada a ver né isso?) [/quote]Pode ter. Se tiver algum objeto com ID, vc vai ter que incluí-lo.

Cara, depois de muito “muído” como se diz aqui no nordeste consegui resolver… Muito obrigado ao amigo Jakefrog pela dica, me ajudou bastante.

Bem, pra resolver, me baseei no que o jakefrog disse que eu teria que incluir todos os id’s… O caminho por inteiro, na realidade tinha tentado localmente isso mas não tinha a certeza de que tinha que ser o caminho inteiro e aí era onde tava o problema. Então depois de muito olhar no firebug o nome das variáveis que o primefaces gera automáticamente resolvi colocar id’s em todos os elementos e também fazer uma árvore de todos os contêineres principais (me baseei no flex pra isso :D).

Tipo:

-TabViewSistema
–|___TabViewSistemaAba1
–|----------|________TabViewSistemaAba1Form
–|-------------------------------|________TabViewSistemaAba1FormFormCadastroUsuario
–|___TabViewSistemaAba2
------------|________TabViewSistemaAba2Form
---------------------------------|________TabViewSistemaAba2FormFormCadastroRegras

E aí eu descobri todas as variáveis para poder se chegar no que eu queria alterar. Depois disso vi que o que eu queria dar update era isso:

update=":tabViewSistema:tabViewCadastro:formUser:pEditar"

Aproveitando e corrigindo outro errinho que possa vir a dar com vocês depois de vocês colocarem os id’s em tudo. Eu querendo mostar resultado mandei duas tabs exibirem o mesmo conteúdo, o que dá o erro de “o mesmo id:‘nome_do_id’ já existe na view”. Então se der esse erro é porque em alguma parte do código você vai ter que procurar por um id duplicado e alterar…

Valeu, obrigado a todos! :smiley: :smiley: :smiley: :smiley:

somente :pEditar não funcionou ?

Bom dia,

Você tem este exemplo ainda?, preciso fazer algo parecido igual o seu layout, teria como me enviar?

Obrigado

Caso interesse a alguém, tente olhar o seu template, eu estava com o mesmo problema porque tinha um <h:form> dentro do meu template para o meu menu o removi e tudo funcionou perfeitamente, inclusive o menu.

Olá boa tarde.
Estou com um problema parecido, mas não consegui resolver da forma como conseguiste.
Coloquei o número do ID dos registros listados, como sendo parte do nome do identificador dos elementos xhtml.
Exemplo: botaogeraboleto#{pedido.pedidoid}

Só que ele não consegue localizar este elemento.

`<p:dataTable var=“pedido” id=“pedidos#{pedido.pedidoid}” value="#{consignatariabean.pedidos}">

					<p:column headerText="Código do Pedido" style="width:5em">
						<h:outputText value="#{pedido.pedidoid}" />
					</p:column>
					<p:column headerText="Produtos">
					
						<p:dataTable var="itenspedido"
							value="#{pedido.itenspedido}"
							emptyMessage="Nenhum produto listado">
		
							<p:column headerText="Código" style="width:5em">
								<h:outputText value="#{itenspedido.produto.produtoid}" />
							</p:column>
							<p:column headerText="Nome">
								<h:outputText value="#{itenspedido.produto.nome}" />
							</p:column>
							<p:column headerText="Saldo consign. atual" style="width:5em">
								<h:outputText value="#{itenspedido.quantidade}" />
							</p:column>
							<p:column headerText="Qtdade vendida no mês" style="width:5em">
								<p:spinner value="#{itenspedido.quantvendconsign}" size="4" min="0" max="#{itenspedido.quantidade}">
									<p:ajax update="form:totqtvendida,form:vrtotalprodutos,form:pedidos#{pedido.pedidoid}:botaogeraboleto#{pedido.pedidoid}" listener="#{consignatariabean.atualizaTotal}" process="@this" />
								</p:spinner>
							</p:column>
								<p:column headerText="Qtdade paga" style="width:5em">
							</p:column>
							<p:column headerText="Qtdade pgto. pendente" style="width:5em">

							</p:column>
						</p:dataTable>
						
					</p:column>
					<p:column id="colunaboleto#{pedido.pedidoid}" headerText="Boleto" style="width:5em">
						<p:commandButton value="Gerar boleto" id="botaogeraboleto#{pedido.pedidoid}" 
							rendered="#{consignatariabean.botaogeraboleto}" outcome="/boleto.xhtml">
							<f:setPropertyActionListener target="#{consignatariabean.pedidoselecionado}" value="#{pedido}" />
						</p:commandButton>		
					</p:column>
				</p:dataTable>`

Na época não.

Infelizmente não tenho mais, faz tempo que saí da empresa e o projeto ficou lá.