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
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!
tenclar
Novembro 26, 2012, 12:01pm
#10
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>`
Infelizmente não tenho mais, faz tempo que saí da empresa e o projeto ficou lá.