[RESOLVIDO] Ajuda com p:dialog do primefaces [RESOLVIDO]

olá galera,
estou fazendo um CRUD que contem um table onde serão listados os resultados…
nesse table existe um btn para atualizar a linha selecionada (alterar os dados U - CRUD, rss)
esse btn chama um dialog q ira atualizar os dados…
o Dialog possui um btn atualizar…

o problema e o seguinte… eu atualizo os dados no input e clico em atualizar so que ele não atualiza
os campos no MBean… ele continua com dados antigos…

o dialog chama o metodo atualizar certinho, porem n altera o valor das propriedades…

meu exemplo e parecidissimo com o showcase porem no meu não funciona =(

vou postar os codigos… lembrando apenas q eles estão detro de um acordion… so pra organizar melhor vcs irão ver…

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./../../../template/main.xhtml"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:h="http://java.sun.com/jsf/html">
    
    <ui:define name="title">
        <h:outputText value="Cadastro de Regiões administrativas" />
    </ui:define>

    <ui:define name="content">
        <p:growl id="growl" showDetail="true" sticky="false"  />
        
        <p:accordionPanel autoHeight="false" activeIndex="1">
            <p:tab title="Nova Região administrativa"  >
                <ui:include src="novaRegiaoAdministrativa.xhtml" />
            </p:tab>
            <p:tab title="Consultar Regiões administrativa" >
                <ui:include src="consultarRegioesAdministrativas.xhtml" />
            </p:tab>
        </p:accordionPanel>
    </ui:define>

</ui:composition>
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:f="http://java.sun.com/jsf/core">

    <h:form prependId="false" id="frmRegAdm">
        <h:panelGrid columns="3" cellpadding="10" >
            <h:outputText value="Nome: " />
            <p:inputText value="#{mainBean.controladorRegiao.chavePesquisa}" />
            <p:commandButton value="Pesquisar" actionListener="#{mainBean.controladorRegiao.listarRegioes}" update="table_regiao"/>
        </h:panelGrid>

        <p:dataTable var="regAdm" value="#{mainBean.controladorRegiao.regioes}" id="table_regiao"
                     paginator="true" rows="10" paginatorPosition="bottom" >

            <f:facet name="header">
                <h:outputText value="Lista de Regiões" />
            </f:facet>

            <p:column headerText="Codigo">
                <h:outputText value="#{regAdm.codigo}" />
            </p:column>

            <p:column headerText="Nome popular">
                <h:outputText value="#{regAdm.nomePopular}" />
            </p:column>

            <p:column headerText="UF">
                <h:outputText value="#{regAdm.estado}" />
            </p:column>

            <p:column style="width:100px">
                <h:panelGrid columns="3" cellpadding="2"  styleClass="actions">
                    <p:commandButton update=":frmRegAdm:pnlReg" oncomplete="regiaoDialog.show()" image="ui-icon ui-icon-search" title="View">
                        <f:setPropertyActionListener value="#{regAdm}" target="#{mainBean.controladorRegiao.regiaoCadastro}" />
                        <f:setPropertyActionListener value="#{false}" target="#{mainBean.controladorRegiao.editMode}" />
                    </p:commandButton>
                    <p:commandButton update=":frmRegAdm:pnlReg" oncomplete="regiaoDialog.show()" image="ui-icon ui-icon-pencil" title="Edit">
                        <f:setPropertyActionListener value="#{regAdm}" target="#{mainBean.controladorRegiao.regiaoCadastro}" />
                        <f:setPropertyActionListener value="#{true}" target="#{mainBean.controladorRegiao.editMode}" />
                    </p:commandButton>
                    <p:commandButton update=":frmRegAdm:pnlReg" oncomplete="confirmation.show()" image="ui-icon ui-icon-close" title="Delete" rendered="false">

                    </p:commandButton>
                </h:panelGrid>
            </p:column>
        </p:dataTable>

        <!--confirm dialog -->
        <p:confirmDialog message="Tem certeza que deseja excluir?" width="200" appendToBody="true"
                         header="Confirmar" severity="alert" widgetVar="confirmation">
            <p:commandButton value="Sim" update="table_regiao"  oncomplete="confirmation.hide()" style="margin-right: 8px"/>
            <p:commandButton value="Não" onclick="confirmation.hide()" type="button" />
        </p:confirmDialog>

        <!-- edit dialog -->
        <p:dialog header="Região administrativa" widgetVar="regiaoDialog" resizable="false" id="regDlg"
                  width="650" showEffect="fade" hideEffect="explode" modal="true" appendToBody="true">

            <p:panel id="pnlReg">
                <h:panelGrid columns="2" cellpadding="3" >
                    <h:column>
                        <h:outputText value="Nome popular: * " />
                    </h:column>
                    <h:column>
                        <h:panelGrid columns="3">
                            <h:outputText value="#{mainBean.controladorRegiao.regiaoCadastro.nomePopular}" style="font-weight:bold; margin-right: 8px" rendered="#{!mainBean.controladorRegiao.editMode}"/>
                            <p:inputText required="true" value="#{mainBean.controladorRegiao.regiaoCadastro.nomePopular}" size="28" style="margin-right: 8px" rendered="#{mainBean.controladorRegiao.editMode}"/>

                            <h:outputText value="Estado: * " />
                            <h:outputText value="#{mainBean.controladorRegiao.regiaoCadastro.estado}" style="font-weight:bold; margin-left: 8px" rendered="#{!mainBean.controladorRegiao.editMode}"/>
                            <p:selectOneMenu required="true" style="margin-left: 8px" value="#{mainBean.controladorRegiao.regiaoCadastro.estado}" rendered="#{mainBean.controladorRegiao.editMode}">
                                <f:selectItem itemLabel="Selecione" itemValue="0" />
                                <f:selectItems value="#{mainBean.estados}" />
                            </p:selectOneMenu>
                        </h:panelGrid>
                    </h:column>

                    <h:column>
                        <h:outputText value="Nome completo: * " />
                    </h:column>
                    <h:column>
                        <h:outputText value="#{mainBean.controladorRegiao.regiaoCadastro.nomeCompleto}" style="font-weight:bold; margin-left: 4px" rendered="#{!mainBean.controladorRegiao.editMode}"/>
                        <p:inputText required="true" value="#{mainBean.controladorRegiao.regiaoCadastro.nomeCompleto}" size="50" style="margin-left: 4px" rendered="#{mainBean.controladorRegiao.editMode}"/>
                    </h:column>
                </h:panelGrid>

                <br/>

                <p:outputPanel rendered="#{mainBean.controladorRegiao.editMode}" layout="block" style="text-align:left">
                    <p:commandButton value="Atualizar" update="table_regiao growl" actionListener="#{mainBean.controladorRegiao.atualizar}"
                                     image="ui-icon ui-icon-check" />

                    <p:commandButton value="Cancelar" onclick="regiaoDialog.hide()" type="button" image="ui-icon ui-icon-close" style="margin-left: 8px"/>
                </p:outputPanel>

                <p:outputPanel rendered="#{!mainBean.controladorRegiao.editMode}" layout="block" style="text-align:left">
                    <p:commandButton value="Fechar" onclick="regiaoDialog.hide()" type="button" image="ui-icon ui-icon-close" style="margin-left: 8px"/>
                </p:outputPanel>
            </p:panel>
        </p:dialog>
    </h:form>
</ui:composition>
não vo colocar o cod do novo pra economizar espaço... afinal ele funfa XD
package br.com.ainosoft.tulipa.controladores;

import br.com.ainosoft.tulipa.dominio.Regiao;
import br.com.ainosoft.tulipa.servicos.database.RegiaoDAO;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.util.ComponentUtils;

/**
 * Controlador especificamente destinado a operações relacionadas a manipulação
 * de registros relacionados a regiões administrativas.
 *
 * @author Pedro E. Cunha Brigatto (mailto: pedro.brigatto@ainosoft.com.br)
 */
public class ControladorRegiao {

    private boolean editMode = false;

    private String estadoSelecionado = null;
    private String chavePesquisa = null;
    private Regiao regiaoCadastro = null;

    private List<Regiao> regioes = null;

    public ControladorRegiao () {
        regiaoCadastro = new Regiao();
    }

    public boolean isEditMode() {
        return editMode;
    }

    public void setEditMode(boolean editMode) {
        this.editMode = editMode;
    }

    public String getEstadoSelecionado() {
        return estadoSelecionado;
    }

    public void setEstadoSelecionado(String estadoSelecionado) {
        this.estadoSelecionado = estadoSelecionado;
    }

    public Regiao getRegiaoCadastro() {
        return regiaoCadastro;
    }

    public void setRegiaoCadastro(Regiao regiaoCadastro) {
        this.regiaoCadastro = regiaoCadastro;
    }

    public void listarRegioes () {
//        if (chavePesquisa == null || "".equals(chavePesquisa)) {
//            regioes = new RegiaoDAO().consultarTodas();
//        } else {
//            regioes = new RegiaoDAO().consultar(chavePesquisa);
//        }
		
		//aqui e so pra testar
		
        regioes.add(new Regiao("SP", "reg 1", "regiao 1"));
    }

    public List<Regiao> getRegioes() {
        if (regioes == null) {
            regioes = new ArrayList<Regiao>();
        }
        return regioes;
    }
    
    public String getChavePesquisa() {
        return chavePesquisa;
    }

    public void setChavePesquisa(String chavePesquisa) {
        this.chavePesquisa = chavePesquisa;
    }

    public boolean cadastrarRegiao () {
        return new RegiaoDAO().adicionar(regiaoCadastro);
    }

    public boolean atualizar () {

        boolean sucess = true;

        // aqui oh... ele n atualizou.. continua com valores antigos...

        System.out.println(regiaoCadastro.getNomePopular());
        System.out.println(regiaoCadastro.getNomeCompleto());

//        int index = regioes.indexOf(regiaoCadastro);
//
//        if(new RegiaoDAO().atualizar(regiaoCadastro)){
//            regioes.set(index, regiaoCadastro);
//            sucess = true;
//        }

        return sucess;
    }
}

estou usando a lib 3.0 do primefaces…

help please, heheh

ja ta batendo a locura… ¬¬’

valeu galera abs

Olá,

Notei que você usou <h:form prependId=“false” id=“frmRegAdm”>. Esse prependId é o atributo que diz se os ids dos elementos dentro do form serão formados pelo id do form seguidos do seu próprio id (um form id=“form1” com input id=“input1” o id real do input seria “form1:input1”). Como ele está false não há necessidade de colocar o id do form nos “updates” das ações.
Sendo assim tente:

  <p:commandButton update="pnlReg" oncomplete="regiaoDialog.show()" image="ui-icon ui-icon-pencil" title="Edit">  

ou seja, sem o :frmRegAdm:

da mesma forma você faz com os outros “updates”.

olá,

bem retirei o :frmRegAdm:

mesmo assim ele continua não aterando o valor… alem disso ele me retornou a seguinte msg no console

reg 1
regiao 1
10/05/2011 11:55:12 org.primefaces.util.ComponentUtils findClientIds
INFO: Cannot find component with identifier "pnlReg" in view.
10/05/2011 11:55:12 org.primefaces.util.ComponentUtils findClientIds
INFO: Cannot find component with identifier "pnlReg" in view.

tirei o prependId=“false” e ele volta a msg original… ou seja, ele n atualiza os valores…

sei lah acho q ele n esta fazendo o submit dos campos do dialog… putz ta complicado…

mais alguma alma bondosa pra me ajudar?

t+ abs

Outra coisa que esqueci de mencionar é o process, é bom você utilizar, para que processe apenas o elemento utilize o @this, assim evita passar por validação em outros campos

<p:commandButton process="@this" update="pnlReg" oncomplete="regiaoDialog.show()" image="ui-icon ui-icon-pencil" title="Edit">  

Outra dica importante, é o atributo appendToBody do dialog, já tive problemas com ele, testa com ele false, já que é apenas um form pra tudo que você está utilizando. Ou cria outro form dentro do dialog, separando ele assim do seu outro form.

hum… vou testar isso com calma em casa… depois comento como ficou… se resolveu

valeu abs

Olá,

bem consegui resovler o problema…

O problema era o !@@#%$¨appendToBody… foi so colocar ele para false e td começou a funcionar milagrosamente O.O’

eu havia colocado ele pois o popup ficava limitado a altura do acordion, sendo assim qnd o popup era grande ele “cortava”.

bem pra resolver… coloquei o dialog em um arquivo diferente e coloquei ele dentro do seu proprio form e para finalizar fiz o include fora dos acordions…
com isso ele abre na pagina sem ficar limitado…

A dica que deixo e tomar cuidado ao usar o appendToBody… ele se coporta bem em dialogs de Datail ou Msg, porem para atualizar ou realizar algum comando ele nao se sai muito bem…

oq acontecia e q ele colocava o conteudo do dialog no final do html… dentro do body e claro =)
com isso ele ficava fora do form… e como se recortase do lugar q vc colocou ele colase no final do html…
então cuidado… ok

bem e isso

flw galera abs

ola estou com um problema parecido com este so que não esta funcionando do jeito que foi passo neste forum
so que o que esta acontecendo comigo é o seguinte.

eu estou abrindoo conteudo dam inha grid em um dialo para ser alterado.

ele carrega conteudo normal.

so que quando eu faço alguma alteracao nos campos e clico em atualizar ele não atualiza os dados.

so que se eu apertar f5 e realizar todo o procedimento novamente ele realiza a atualização.

o que pode ser q esta acontecendo???
alguem tem uma solucao…

valeu

olá andreluiz_sh

vc esta atualizando o seu grid qnd vc clica em atualizar na popup???
se n for isso… posta o codigo (jsp e MB)

ok t+ abs