[Resolvido] Atualizar objeto de datables com dialog

6 respostas
P

Galera, algum pode mim ajudar?
Quero atualizar um objeto de uma datatable abrindo em um dialog.
Só que quando clico no botão para editar não abre o dialog
Codigos:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <p:panel header="Funcionários">
            <p:panel>
                <f:facet name="header">  
                    <h:form>
                        <p:outputPanel>  
                            <div style="text-align: left; float: left">                                    
                                <h:outputLabel value="Localizar: " />  
                                <p:inputText  value="" style="width:150px" />  
                            </div>
                            <div style="text-align: right; float: right">                                    
                                <p:commandButton value="Novo" image="ui-icon-document" title="Novo Funcionário" onclick="dialogFuncionario.show();"/>
                            </div>                                
                        </p:outputPanel>  
                    </h:form>
                </f:facet> 
                <h:form>
                    <p:dataTable value="#{FuncionarioMB.listar()}" var="funcionario" id="table"  >
                        <p:column headerText="Nome" style="text-align: left">
                            <h:outputLabel value="#{funcionario.nome}" />                    
                        </p:column>
                        <p:column headerText="Cpf" style="text-align: left">
                            <h:outputLabel value="#{funcionario.cpf}" />                    
                        </p:column> 
                        <p:column headerText="RG" style="text-align: left">
                            <h:outputLabel value="#{funcionario.rg}" /> 
                        </p:column> 
                        <p:column headerText="Endereço" style="text-align: left">
                            <h:outputLabel value="#{funcionario.endereco}" />                    
                        </p:column> 
                        <p:column headerText="Sexo" style="text-align: left">
                            <h:outputLabel value="#{funcionario.sexo}" />                    
                        </p:column> 
                        <p:column headerText="Tipo" style="text-align: left">
                            <h:outputLabel value="#{funcionario.tipo}" />                    
                        </p:column> 
                        <p:column>
                            <p:commandLink value="Remover" actionListener="#{FuncionarioMB.deletarFuncionario(funcionario)}" update="table"/>                    
                        </p:column> 
                         <p:column>
                             <p:commandButton value="Alterar" actionListener="#{FuncionarioMB.AlterarFuncionario()}" 
                                              onclick="diagloEditarFuncionario.show();"  update="table">
                                 <f:setPropertyActionListener target="#{FuncionarioMB.funcionarioSelecionado}" value="#{funcionario}"/>
                             </p:commandButton>
       
                            
                             
                        </p:column> 
                    </p:dataTable>
                </h:form>

                <p:dialog id="dialog" header="Novo Funcionário" widgetVar="dialogFuncionario"
                          appendToBody="true" resizable="false" closable="false"
                          modal="true" showEffect="fade" hideEffect="fade" width="450">
                    <h:form id="formDialog">
                        <h:panelGrid columns="2" >
                            <h:outputText value="Nome"/>
                            <p:inputText value="#{FuncionarioMB.funcionario.nome}"/>
                            

                            <h:outputText value="CPF"/>
                            <p:inputText value="#{FuncionarioMB.funcionario.cpf}"/>                    

                            <h:outputText value="RG"/>
                            <p:inputText value="#{FuncionarioMB.funcionario.rg}"/>                    

                            <h:outputText value="Endereço"/>
                            <p:inputText value="#{FuncionarioMB.funcionario.endereco}"/>                    

                            <h:outputText value="Sexo"/>
                            <p:inputText value="#{FuncionarioMB.funcionario.sexo}"/>                    

                            <h:outputText value="Tipo"/>
                            <p:inputText value="#{FuncionarioMB.funcionario.tipo}"/>                    
                        </h:panelGrid>
                        <p:separator/>
                        <h:commandButton value="Cadastrar" actionListener="#{FuncionarioMB.cadastrarFuncionario()}"/>
                        <h:commandButton value="Cancelar" onclick="dialogFuncionario.hide();"/>
                    </h:form>
                </p:dialog>
                 <p:dialog id="dialogEditar" header="Novo Funcionário" widgetVar="dialogEditarFuncionario"
                          appendToBody="true" resizable="false" closable="false"
                          modal="true" showEffect="fade" hideEffect="fade" width="450"  >
                    <h:form id="formDialogEditar">
                        <h:panelGrid columns="2" >
                            <h:outputText value="Nome"/>
                            <p:inputText value="#{FuncionarioMB.funcionarioSelecionado.nome}"/>
                            

                            <h:outputText value="CPF"/>
                            <p:inputText value="#{FuncionarioMB.funcionarioSelecionado.cpf}"/>                    

                            <h:outputText value="RG"/>
                            <p:inputText value="#{FuncionarioMB.funcionarioSelecionado.rg}"/>                    

                            <h:outputText value="Endereço"/>
                            <p:inputText value="#{FuncionarioMB.funcionarioSelecionado.endereco}"/>                    

                            <h:outputText value="Sexo"/>
                            <p:inputText value="#{FuncionarioMB.funcionarioSelecionado.sexo}"/>                    

                            <h:outputText value="Tipo"/>
                            <p:inputText value="#{FuncionarioMB.funcionarioSelecionado.tipo}"/>                    
                        </h:panelGrid>
                        <p:separator/>
                        <h:commandButton value="Salvar"/>
                        <h:commandButton value="Cancelar" onclick="dialogEditarFuncionario.hide();"/>
                    </h:form>
                </p:dialog>
            </p:panel>
        </p:panel>
    </h:body>
</html>
* To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.controle;

import br.com.dao.DaoFuncionario;
import br.com.modelo.Funcionario;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;

/**
 *
 * @author Pablo Rocha
 */
@ManagedBean(name = "FuncionarioMB")
public class FuncionarioMB {
    
    private Funcionario funcionario = new Funcionario();
    private DaoFuncionario daoFuncionario = new DaoFuncionario();
    private List<Funcionario> listaFuncionario = new ArrayList();
    private Funcionario funcionarioSelecionado = new Funcionario();

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public DaoFuncionario getDaoFuncionario() {
        return daoFuncionario;
    }

    public void setDaoFuncionario(DaoFuncionario daoFuncionario) {
        this.daoFuncionario = daoFuncionario;
    }
     
    public void cadastrarFuncionario(){
        daoFuncionario.adicionar(funcionario);
    }

    public List<Funcionario> getListaFuncionario() {
        return listaFuncionario;
    }

    public void setListaFuncionario(List<Funcionario> listaFuncionario) {
        this.listaFuncionario = listaFuncionario;
    }

  
    public List<Funcionario> listar() {
        listaFuncionario = daoFuncionario.listarTudo();
        return listaFuncionario;
    }

    public Funcionario getFuncionarioSelecionado() {
        return funcionarioSelecionado;
    }

    public void setFuncionarioSelecionado(Funcionario funcionarioSelecionado) {
        this.funcionarioSelecionado = funcionarioSelecionado;
    }
    
    
    
     public void deletarFuncionario(Funcionario f){
        this.funcionario = f;
        daoFuncionario.removerFuncionario(funcionario);
    }
     
     public void AlterarFuncionario(){
        daoFuncionario.AlterarFuncionario(funcionarioSelecionado);
    }

}

Desde já, agradeço!

6 Respostas

Roselito_Favero_da_S

Você digitou o nome do dialog errado:

Corrija e veja se é isso.

P

Nossa, erro grotesco, kkk , fiquei ate com vergonha.
Abriu o form, mas ele fecha em seguida, sabe o que pode ser?
E em relação a usar o selection na datable, muda alguma coisa?
Obrigado cara, valeu mesmo.

Roselito_Favero_da_S

O fato de fechar sozinho pode ser bastante coisa… aquele appendToBody do dialog é sinônimo de problemas… tenta tirar e também dá uma revisada no seu bean.

Quanto ao select no dataTable, especifique mais um pouco sua dúvida. Talvez eu possa ajudar.

P

Ok.
Digitei errado no outro post, é selection. Vi em alguns exemplos na internet que usam a atributo selection ao invés de f:setPropertyActionListener. Só que não conseguir desse jeito.
Obrigado.

Roselito_Favero_da_S

Olha, tem várias maneiras de fazer. Vai do desenvolvedor - eu, por exemplo, costumo usar como você fez no botão remover: um método que recebe um objeto que já está lá no dataTable, esperando para ser usado.

P

Ok. Obrigado!

Criado 23 de novembro de 2013
Ultima resposta 24 de nov. de 2013
Respostas 6
Participantes 2