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

8 respostas
J

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: [email removido])
 */
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

8 Respostas

A

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”.

J

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

A

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">
A

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.

J

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

valeu abs

J

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

A

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

J

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

Criado 10 de maio de 2011
Ultima resposta 20 de ago. de 2012
Respostas 8
Participantes 3