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

14 respostas
Vin_ius_Abreu_de_Fra

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?

14 Respostas

gomesrod

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

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

Hebert_Coelho

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

Vin_ius_Abreu_de_Fra

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:

Hebert_Coelho

Tente
:mainPanel:formUser:usrEdit:pEditar

Vin_ius_Abreu_de_Fra

: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

Vin_ius_Abreu_de_Fra

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!

Hebert_Coelho

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?)
Pode ter. Se tiver algum objeto com ID, vc vai ter que incluí-lo.

Vin_ius_Abreu_de_Fra

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:

tenclar

somente :pEditar não funcionou ?

F

Bom dia,

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

Obrigado

M

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.

I

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>`
Vin_ius_Abreu_de_Fra

Na época não.

Vin_ius_Abreu_de_Fra

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

Criado 4 de abril de 2012
Ultima resposta 17 de jun. de 2016
Respostas 14
Participantes 7