Dois problemas ao gravar cadastro - Primefaces

3 respostas
V

Boa noite galera, eu utilizo MySQL + Hibernate(Gerado pelo NetBeans). E tenho os seguintes problemas. Quando eu clico em salvar tem que desabilita-lo depois. O problema é que quando desabilito o botao ele não chama o metodo salvar. O segundo problema é que quando salvo ele ta salvando o nome como NULL no banco de dados. Para explicar melhor vou postar os codigos.

XHTML:

<?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://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
<script type="text/javascript" src="Script.js"></script>    
<p:dialog header="Cadastro de País" widgetVar="GRLPR001" width="600" height="235"  resizable="false" minimizable="true" closable="false">
        <h:panelGrid columns="13" >
            <p:commandLink id="novo" disabled="#{beanGRLPR001.disabledNovo}" action="#{beanGRLPR001.novo()}" update="novo, pesquisar, painel"> 
                <p:graphicImage value="/imagens/novo.png" style="border: none;"/>
            </p:commandLink>
            <p:tooltip for="novo" value="Novo" showEffect="fade" hideEffect="fade" />

            <p:commandLink id="editar" disabled="#{beanGRLPR001.disabledEditar}"> 
                <p:graphicImage value="/imagens/editar.png" style="border: none;"/>
            </p:commandLink>
            <p:tooltip for="editar" value="Editar" showEffect="fade" hideEffect="fade" />           
            
            <p:commandLink id="excluir" disabled="#{beanGRLPR001.disabledExcluir}"> 
                <p:graphicImage value="/imagens/excluir.png" style="border: none;"/>
            </p:commandLink>
            <p:tooltip for="excluir" value="Excluir" showEffect="fade" hideEffect="fade" />

            <p:commandLink id="cancelar" disabled="#{beanGRLPR001.disabledCancelar}" action="#{beanGRLPR001.cancelar()}" update="novo, pesquisar, painel" > 
                <p:graphicImage value="/imagens/cancelar.png" style="border: none;"/>
            </p:commandLink>
            <p:tooltip for="cancelar" value="Cancelar" showEffect="fade" hideEffect="fade" />

            <p:commandLink id="fechar" onclick="GRLPR001.hide()" disabled="#{beanGRLPR001.disabledFechar}" > 
                <p:graphicImage value="/imagens/fechar.png" style="border: none;"/>
            </p:commandLink>
            <p:tooltip for="fechar" value="Fechar" showEffect="fade" hideEffect="fade" />
            
            <p:spacer width="20px"/>
            
        </h:panelGrid>
        
       <h:panelGrid columns="1">
            <h:outputText value="Código" />
        </h:panelGrid>        
    
       <h:panelGrid columns="3">
           <p:inputText disabled="true" style="width: 70px; height: 20px" />
            
            <p:commandLink id="pesquisar" disabled="#{beanGRLPR001.disabledPesquisar}"> 
                <p:graphicImage value="/imagens/pesquisar.png" style="border: none;"/>
            </p:commandLink>           
            <p:tooltip for="pesquisar" value="Pesquisar" showEffect="fade" hideEffect="fade" />                        
        </h:panelGrid>        
    
    
       <h:panelGrid id="painel" columns="1">
            <p:separator style="width: 560px"/>
            <h:outputText value="Nome" />
            <p:inputText value="#{beanGRLPR001.gertbpai.gerNomePai}" disabled="#{not beanGRLPR001.edicao}" maxlength="40" style="width: 560px; height: 20px" />            
        </h:panelGrid>   
    
    <center>
        <p:commandButton id="btnSalvar" value="Salvar" disabled="#{ not beanGRLPR001.disabledSalvar}" actionListener="#{beanGRLPR001.salvar()}" 
                         style="height: 35px" update="novo, pesquisar, painel, btnSalvar"/>
    </center>
    </p:dialog>
</html>

O ManageBean:

package controller;

import entidades.Gertbpai;
import hibernate.HibernateUtil;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.hibernate.Session;

@ManagedBean
@RequestScoped
public class BeanGRLPR001 {
    
    public boolean disabledNovo;
    public boolean disabledEditar;
    public boolean disabledExcluir;
    public boolean disabledCancelar;
    public boolean disabledFechar;
    public boolean disabledPesquisar;
    public boolean disabledSalvar;
    public boolean edicao;
    public String status;
    public Gertbpai gertbpai = new Gertbpai();
    

    public Gertbpai getGertbpai() {
        return gertbpai;
    }

    public void setGertbpai(Gertbpai gertbpai) {
        this.gertbpai = gertbpai;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }


    public boolean isEdicao() {
        return edicao;
    }

    public void setEdicao(boolean edicao) {
        this.edicao = edicao;
    }

    public boolean isDisabledCancelar() {
        return disabledCancelar;
    }

    public void setDisabledCancelar(boolean disabledCancelar) {
        this.disabledCancelar = disabledCancelar;
    }

    public boolean isDisabledEditar() {
        return disabledEditar;
    }

    public void setDisabledEditar(boolean disabledEditar) {
        this.disabledEditar = disabledEditar;
    }

    public boolean isDisabledExcluir() {
        return disabledExcluir;
    }

    public void setDisabledExcluir(boolean disabledExcluir) {
        this.disabledExcluir = disabledExcluir;
    }

    public boolean isDisabledFechar() {
        return disabledFechar;
    }

    public void setDisabledFechar(boolean disabledFechar) {
        this.disabledFechar = disabledFechar;
    }

    public boolean isDisabledNovo() {
        return disabledNovo;
    }

    public void setDisabledNovo(boolean disabledNovo) {
        this.disabledNovo = disabledNovo;
    }

    public boolean isDisabledPesquisar() {
        return disabledPesquisar;
    }

    public void setDisabledPesquisar(boolean disabledPesquisar) {
        this.disabledPesquisar = disabledPesquisar;
    }

    public boolean isDisabledSalvar() {
        return disabledSalvar;
    }

    public void setDisabledSalvar(boolean disabledSalvar) {
        this.disabledSalvar = disabledSalvar;
    }

    public BeanGRLPR001() {
        disabledNovo      = false;
        disabledEditar    = true;
        disabledExcluir   = true;
        disabledCancelar  = false;
        disabledFechar    = false;
        disabledPesquisar = false;
        disabledSalvar    = true;
        edicao            = false; 
    }
    
    public void novo() {
        edicao            = true;
        disabledNovo      = true;
        disabledPesquisar = true;
        disabledFechar    = true;
        disabledSalvar    = false;
        
    }
    
    public void editar() {
        edicao            = true;
        disabledNovo      = true;
        disabledPesquisar = true;
        disabledFechar    = true;
        disabledSalvar    = false;
        status            = "U";
    }
    
    public void cancelar() {
        disabledNovo      = false;
        disabledEditar    = true;
        disabledExcluir   = true;
        disabledCancelar  = false;
        disabledFechar    = false;
        disabledPesquisar = false;
        disabledSalvar    = true;
        edicao            = false;
        status            = "";
    }
    
    public  void insert() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(getGertbpai());
        session.getTransaction().commit();
    }
    
    public  void update() {
        
    }
    
    public void salvar() {
        insert();
    }
}

Quando eu tenho não xhtml chama o metodo salvar:

<p:commandButton id="btnSalvar" value="Salvar" disabled="#{ not beanGRLPR001.disabledSalvar}" actionListener="#{beanGRLPR001.salvar()}" 
                         style="height: 35px" update="novo, pesquisar, painel, btnSalvar"/>

Quando eu tiro o update em relação ao btnSalvar funciona:

<p:commandButton id="btnSalvar" value="Salvar" disabled="#{ not beanGRLPR001.disabledSalvar}" actionListener="#{beanGRLPR001.salvar()}" 
                         style="height: 35px" update="novo, pesquisar, painel"/>

Ja no Manage Bean na parte do insert, grava como null:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(getGertbpai());
        session.getTransaction().commit();

Mas se coloco assim ele grava:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        getGertbpai.setGerNomePai("TESTE");
        session.save(getGertbpai());
        session.getTransaction().commit();

Alguem poderia me ajudar ? Abraços

3 Respostas

alves.Felipe

coloca o seu p:dialog dentro de um form… acho que resolve o problema de não acatar o nome…
e sobre o seu desabilitar… não entendi muito bem… mas pelo que parece ele passa no getdisabledSalvar antes do salvar…
da uma debugada nesses métodos…
tenta alterar de @RequestScoped para @viewScoped

HenriqueBR

No construtor coloque todos botões = false.

No método insert() vc coloca o botão salvar como true. Daí vc faz o update.

Outra solução é usar o AjaxStatus para controlar o estado do botão, mas como vc faz para todos os botões fica mais complicado.
http://www.primefaces.org/showcase/ui/pprAjaxStatus.jsf

V

É, muito evento fica complicado. Cheguei até a desempolgar com JSF. Mas vou tentar fazer estilo CRUD. Obrigado, abraços.

Criado 26 de março de 2012
Ultima resposta 28 de mar. de 2012
Respostas 3
Participantes 3