[RESOLVIDO] pdate em um CommandButton não atualiza dataTable de cadastro de noticias

Olá, sou novo com o desenvolvimento web e estou desenvolvendo um cadastro de noticias com JSF 2.0 + Primefaces

estou desenvolvendo a parte do layout e meu amigo desenvolve a programação, porém nos deparamos com um problema que está dificil solucionar, talvez para alguem experiente seja algo facil, porém para mim está meio confuso.

Temos uma sessão de cadastro de noticias, na qual está funcionando normalmente, porém utilizo template para formular as paginas e possuo apenas um form que já esta incluso no meu template, depois só dou um include para puxar as paginas xhtml nos seus devidos espaços, nesse cadastro temos um panelGrid que vão as informações da noticia inclusve imagem e envia pro banco, abaixo deste panel temos um dataTable que nos mostra as noticias cadastradas, imagems, titulo descrição data e botão de excluir e editar, porém o nosso problema esta com o botão editar.
Ao clicar no botão é para dar um update no panelGrid, porem se colocarmos o id do panel ele não encontra, para isso resolvi colocando ajax=“false”, porém as imagens da listagem desaparecem e ao salvar a noticia ele nao atualiza a listagem de baixo, porém se eu clicar no editar novamente o texto está modificado.
Se eu usar sem o ajax, preciso dar um f5 para listar no meu panelGrid, queria resolver este problema, saber o que está acontecendo, postarei aqui o comando que esta ocorrendo este pequeno erro.

[quote]<ui:composition template=“templateadmin.xhtml”
xmlns=“http://www.w3.org/1999/xhtml
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:p=“http://primefaces.org/ui
xmlns:ui=“http://java.sun.com/jsf/facelets”>

<ui:define name="header">
    <ui:include src="top.xhtml"/>
</ui:define>

<ui:define name="menu">
    <ui:include src="menuadmin.xhtml"/>
</ui:define>

<ui:define name="body">
    
        <p:panelGrid id="painel" columns="2" style="width: 550px">  
            <f:facet name="header">  
                Cadastrar Notícias 
            </f:facet>               

            <h:outputLabel for="titulo" value="Título:" style="width: 150px" />  
            <p:inputText id="titulo" value="#{cadastroNoticiasMB.noticia.titulo}" label="Título" style="width: 400px"/>

            <h:outputLabel for="descricao" value="Descrição:" style="width: 150px" />  
            <p:inputTextarea id="descricao" value="#{cadastroNoticiasMB.noticia.descricao}"  label="Descrição" style="width: 400px"/>

            <h:outputLabel for="autor" value="Autor:" style="width: 150px" />  
            <p:inputText id="autor" value="#{cadastroNoticiasMB.noticia.autor}" label="Autor" style="width: 400px"/>

            <h:outputText value="Jogo:" />  
            <p:selectOneMenu value="#{cadastroNoticiasMB.noticia.jogo}" converter="JogoConverter">  
                <f:selectItem itemLabel="Selecione..." itemValue="" />  
                <f:selectItems value="#{cadastroNoticiasMB.jogos}" var="j" itemLabel="#{j.nome}" itemValue="#{j}" />                  
            </p:selectOneMenu> 

            <h:outputLabel for="imagem" value="Imagem:" style="width: 150px" />                                                                                    
            <p:fileUpload id="imagem"                           
                          label="Selecionar"
                          fileUploadListener="#{cadastroNoticiasMB.carregarArquivo}"  
                          mode="advanced"
                          update="mensagensPainel"
                          sizeLimit="600000"   
                          allowTypes="/(\.|\/)(gif|jpe?g|png)$/">                
            </p:fileUpload>                          

            <p:growl id="mensagensPainel" showDetail="true"/>

            <f:facet name="footer">  
                <p:commandButton value="Salvar" 
                                 icon="ui-icon-check" 
                                 style="margin:0" 
                                 action="#{cadastroNoticiasMB.salvarNoticia}" 
                                 update="mensagensPainel painel listaNoticias"/>  
            </f:facet>  
        </p:panelGrid> 

        <br/>

        <p:dataTable id="listaNoticias" 
                     var="n" 
                     value="#{cadastroNoticiasMB.noticiasCadastradas}" 
                     paginator="true" 
                     rows="10"                     
                     emptyMessage="Não há notícias cadastradas."> 

            <p:column headerText="Imagem" style="width: 20%">  
                <h:graphicImage url="#{n.caminhoImagem}" style="width: 110px; height: 70px" />  
            </p:column>  

            <p:column headerText="Título" style="width: 40%">  
                <h:outputText value="#{n.titulo}" />  
            </p:column>  

            <p:column headerText="Data" style="width: 20%">  
                <h:outputText value="#{n.dataCriacao}" />  
            </p:column>  

            <p:column headerText="" style="width: 20%">  
                <p:commandButton value="Excluir"
                                 actionListener="#{cadastroNoticiasMB.excluirNoticia}"
                                 update="listaNoticias mensagensTable" >
                    <f:attribute name="noticia" value="#{n}"/>
                </p:commandButton>
                <p:commandButton value="Editar"
                                 ajax="false"
                                 actionListener="#{cadastroNoticiasMB.editarNoticia}"
                                 update="painel" >
                    <f:attribute name="noticia" value="#{n}"/>
                </p:commandButton>
            </p:column>  

            <p:growl id="mensagensTable" showDetail="true"/>

        </p:dataTable>          
    
</ui:define>    

<ui:define name="footer">
    Eu sou apenas o rodapé =/
</ui:define>

</ui:composition>

[/quote]

Alguem poder me dar uma luz? quais opções tenho? que problema é este que está acontecendo?
Obrigado desde já!

Onde está a tag h:form ?

esta no meu template

esta no meu template

olha amigo eu tambem sempre tenho dificuldades em atualizar um panelgrid com ajax atraves de command buttons do prime mas com h:command button os erros sao menores mas mesmo assim vou arriscar um palpite,o id do seu panelgrid “painel” o comand button esta fora desse painel correto? se for isso, quando for chama-lo de fora no seu commandbutton ao inves de usar update=“painel” utilize update=":painel", nao sei se é isso adoraria poder ajudar mais mas estou com febre e nao posso ficar ajudando agora, abraços e boa sorte

Então colocei o :painel e mantendo o ajax=“false” não mudou nada, se eu tiro o ajax ele aparece este erro

Cannot find component with identifier “:painel” referenced from “admin:listaNoticias:0:j_idt36”.

estou realmente perdido, nem sei por onde começar.
Alguem mais pode me ajudar?

Opa… estou desenvolvendo esta aplicação juntamente com o Mailson.

Gostaria de pedir o foco de vocês no seguinte:

Dentro da pagina, que está utilizando o template, temos um panelGrid e um dataTable, ambos do primefaces.

No botão dentro do panelGrid, eu seto o update para a dataTable, e funciona perfeitamente. Já no botão da dataTable, se eu setar o update para o panelGrid, ele acusa erro como se eu estivesse especificando um id inexistente.

O que poderia causar isto, visto que “de cima pra baixo” funciona, mas o contrário não?

Faz o seguinte, abre a sua aplicação no firefox e utilizando o firebug você inspeciona o elemento no qual você quer dar o update para obter o id dele.
Fazendo isso fica facil saber qual qual id você deve fazer o update.
Ao criar o html seu panelGrid que tinha o id panelTeste pode ser que tenha vários outros elementos antes dele e o id real dele pode ser :form:panelPrincipal:panelTeste.
Copie exatamente o id do elemento que quer dar update e adicionar o caracter “:” na frente do mesmo na propriedade update.

[]'s

Cara, muito obrigado pela sua resposta.

Eu já tinha tentado colocar todos os ids da hierarquia, no caso, admin:painel… mas sem sucesso… Colocando o “:” na frente do admin, funcionou!

Mas seguinte, porque raios tem que colocar o “:” na frente? Qual a função deste comando?

Você esta utilizando a implementação Mojarra da Oracle para o jsf 2.0 então sempre que você for fazer um update pelo id é obrigatório você adicionar o caracter “:” para que ele saiba que é para um id.
Se utilizar a implementação Myfaces do Apache isso não é preciso.

Assim como no jQuery para obter um elemento pelo seu id você deve informar o caracter “#” e obter pela sua class o caracter “.” é só um padrão mesmo.

Certo, obrigado pela atenção cara!

Só achei estranho porque em outras telas não foi necessário o uso do “:”, mas blz, vou alterar as outras telas tbm pra ficar padronizado!

Obrigado novamente!

De nada.

So faz o favor de alterar o titulo topico para resolvido.

[]'s