JSF problema com alteração de registro [RESOLVIDO]

2 respostas
CristianPalmaSola10

Galera to com um problema que nunca tinha visto antes, eu tenho uma tela cadastro_cliente, quando cadastro um usuario as validações de tela funcionam normalmente, tudo certinho mas quando estou tentando alterar um registro o ciclo de vida do jsf é interrompido por algum motivo antes da faze de validações, ele é enterrompido na faze aplicar os valores do requesta naum tenho ideia do porque e queria saber se alguem ja passou por isso para me ajudar a resolver esse problema.
vou colocar todos os codigos envolvidos nesse problema

cadastro_usuario

<?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">
<ui:composition template="template.xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core">
    
    <ui:define name="content">
        <h:form id="form" styleClass="form-horizontal">
            <fieldset>
                <legend>#{msgs.cadastroCliente}</legend>
                
                <p:growl id="growl" showDetail="true" autoUpdate="true" life="#{msgs.life}" />
                
                <p:tabView id="tabView">
                    
                    <p:tab id="tab1" title="#{msgs.dadosPrincipais}">
                        <p:focus />
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.nome}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.nome}" styleClass="#{msgs.inputXLarge}"
                                             required="true" requiredMessage="#{msgs.nomeRequerido}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.cpf}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputMask value="#{clienteController.cliente.cpf}" styleClass="#{msgs.inputXLarge}"
                                             mask="#{msgs.cpfMask}"
                                             required="true" requiredMessage="#{msgs.cpfRequerido}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.rg}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputMask value="#{clienteController.cliente.rg}" styleClass="#{msgs.inputXLarge}"
                                             mask="#{msgs.rgMask}"
                                             required="true" requiredMessage="#{msgs.rgRequerido}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.email}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.email}" styleClass="#{msgs.inputXLarge}"
                                             required="true" requiredMessage="#{msgs.emailRequerido}" 
                                             validator="emailValidator"/>
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.sexo}" styleClass="control-label" />
                            <div class="controls">
                                <p:selectOneRadio value="#{clienteController.cliente.sexo}" >
                                    <f:selectItem itemValue="2" itemLabel="Feminino"/>
                                    <f:selectItem itemValue="1" itemLabel="Masculino"/>
                                </p:selectOneRadio>
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.observacao}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputTextarea value="#{clienteController.cliente.observacao}" styleClass="#{msgs.inputXLarge}" />
                            </div>
                        </div>
                    </p:tab>
                    
                    <p:tab id="tab2" title="#{msgs.enderecoResidencial}">
                        <p:focus />
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.rua}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.enderecoresidencia.rua}" styleClass="#{msgs.inputXLarge}"
                                             required="true" requiredMessage="#{msgs.ruaRequerido}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.bairro}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.enderecoresidencia.bairo}" styleClass="#{msgs.inputXLarge}"
                                             required="true" requiredMessage="#{msgs.bairroRequerido}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.numero}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.enderecoresidencia.numero}" styleClass="#{msgs.inputXLarge}"
                                             required="true" requiredMessage="#{msgs.numeroRequerido}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.estado}" styleClass="control-label" />
                            <div class="controls">
                                <p:selectOneMenu value="#{clienteController.idEstadoResidemcial}">
                                    <f:selectItems var="est" value="#{clienteController.listaEstado}" itemLabel="#{est.estado}" itemValue="#{est.idEstado}" />
                                    <p:ajax event="change" listener="#{clienteController.carregarMunicipiosEndResidencial()}" update="panel1" />
                                </p:selectOneMenu>
                            </div>
                        </div>
                        
                        <p:outputPanel id="panel1">
                            <div class="control-group">
                                <h:outputLabel value="#{msgs.municipio}" styleClass="control-label" />
                                <div class="controls">
                                    <p:selectOneMenu value="#{clienteController.idMunicipioResidencial}">
                                        <f:selectItems value="#{clienteController.listaMunicipioResidencial}" var="munc" itemLabel="#{munc.municipio}"
                                                       itemValue="#{munc.idMunicipio}" />
                                    </p:selectOneMenu>
                                </div>
                            </div>
                        </p:outputPanel>
                    </p:tab>
                    
                    <p:tab id="tab3" title="#{msgs.enderecoComercial}">
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.rua}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.enderecotrabalho.rua}" styleClass="#{msgs.inputXLarge}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.bairro}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.enderecotrabalho.bairo}" styleClass="#{msgs.inputXLarge}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.numero}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.enderecotrabalho.numero}" styleClass="#{msgs.inputXLarge}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.estado}" styleClass="control-label" />
                            <div class="controls">
                                <p:selectOneMenu value="#{clienteController.idEstadoComercial}">
                                    <f:selectItems var="est" value="#{clienteController.listaEstado}" itemLabel="#{est.estado}" itemValue="#{est.idEstado}" />
                                    <p:ajax event="change" listener="#{clienteController.carregarMunicipiosEndComercial()}" update="panel2" />
                                </p:selectOneMenu>
                            </div>
                        </div>
                        
                        <p:outputPanel id="panel2">
                            <div class="control-group">
                                <h:outputLabel value="#{msgs.municipio}" styleClass="control-label" />
                                <div class="controls">
                                    <p:selectOneMenu value="#{clienteController.idMunicipioComercial}">
                                        <f:selectItems value="#{clienteController.listaMunicipioComercial}" var="munc2" itemLabel="#{munc2.municipio}"
                                                       itemValue="#{munc2.idMunicipio}" />
                                    </p:selectOneMenu>
                                </div>
                            </div>
                        </p:outputPanel>
                    </p:tab>
                    
                    <p:tab id="tab4" title="#{msgs.usuario}">
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.usuario}" styleClass="control-label" />
                            <div class="controls">
                                <p:inputText value="#{clienteController.cliente.usuario.usuario}" styleClass="#{msgs.inputXLarge}"
                                             required="true" requiredMessage="#{msgs.usuarioRequerido}" />
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.senha}" styleClass="control-label" />
                            <div class="controls">
                                <p:password value="#{clienteController.senha1}" styleClass="#{msgs.inputXLarge}"
                                            required="true" requiredMessage="#{msgs.senhaRequerido}" match="pwd2"
                                            feedback="true" goodLabel="#{msgs.goodLabel}" weakLabel="#{msgs.weakLabel}"
                                            strongLabel="#{msgs.strongLabel}" promptLabel="#{msgs.promptLabel}" 
                                            validatorMessage="#{msgs.cmpSenhaValidatorMsg}"/>
                            </div>
                        </div>
                        
                        <div class="control-group">
                            <h:outputLabel value="#{msgs.repitaSenha}" styleClass="control-label" />
                            <div class="controls">
                                <p:password id="pwd2" value="#{clienteController.senha2}" styleClass="#{msgs.inputXLarge}"
                                            required="true" requiredMessage="#{msgs.repitasenhaRequerido}" />
                            </div>
                        </div>
                    </p:tab>
                </p:tabView>
                
                <div class="form-actions">
                    <p:commandButton value="#{clienteController.labelAcaoBotao}" actionListener="#{clienteController.salvaAtualizar()}"
                                     update=":form"/>
                    <p:commandButton value="Cancelar" styleClass="btn-normal" actionListener="#{clienteController.cancelarInsercao()}"
                                     immediate="true" update=":form"/>
                </div>
            </fieldset>
        </h:form>
    </ui:define>
    
</ui:composition>

lista_cliente

<?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">
<ui:composition template="template.xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core">
    
    <ui:define name="content">
        <h:form id="form" styleClass="form-horizontal">
            <fieldset>
                <legend>#{msgs.cadastroCliente}</legend>
                
                <p:growl id="growl" showDetail="true" autoUpdate="true" life="#{msgs.life}" />
                
                <p:dataTable var="cli" value="#{clienteController.listaCliente}" 
                             paginator="true" rows="10" 
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} 
                             {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">

                    <p:column filterBy="#{cli.nome}" filterMatchMode="contains">
                        <f:facet name="header">#{msgs.nome}</f:facet>
                        #{cli.nome}
                    </p:column>
                    
                    <p:column>
                        <f:facet name="header">#{msgs.cpf}</f:facet>
                        #{cli.cpf}
                    </p:column>
                    
                    <p:column>
                        <f:facet name="header">#{msgs.email}</f:facet>
                        #{cli.email}
                    </p:column>
                    
                    <p:column style="width: 80px;">
                        <p:commandLink actionListener="#{clienteController.editarItem()}" >
                            <f:setPropertyActionListener value="#{cli}" target="#{clienteController.cliente}" />
                            <p:graphicImage value="../resources/imagens/edit.png" />
                        </p:commandLink>
                        <p:spacer width="10" />
                        <p:commandLink >
                            <p:graphicImage value="../resources/imagens/remove.png" />
                        </p:commandLink>
                    </p:column>
                </p:dataTable>
            </fieldset>
        </h:form>
    </ui:define>
    
</ui:composition>

Clientecontroller

package com.perfect.smile.controller;

import com.perfect.smile.bo.ClienteBO;
import com.perfect.smile.bo.EstadoBO;
import com.perfect.smile.bo.MunicipioBO;
import com.perfect.smile.entidade.Cliente;
import com.perfect.smile.entidade.Estado;
import com.perfect.smile.entidade.Municipio;
import com.perfect.smile.util.Constante;
import com.perfect.smile.util.JsfUtil;
import com.sun.faces.context.flash.ELFlash;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

/**
 * @since 21/10/2012
 * @author Cristian Urbainski   
 */
@ManagedBean
@ViewScoped
public final class ClienteController implements Serializable {
    
    private Cliente cliente;
    private String labelAcaoBotao;
    private String senha1;
    private String senha2;
    private Integer idEstadoResidemcial;
    private Integer idEstadoComercial;
    private Integer idMunicipioResidencial;
    private Integer idMunicipioComercial;
    private List<Municipio> listaMunicipioResidencial;
    private List<Municipio> listaMunicipioComercial;
    private List<Estado> listaEstado;
    private List<Cliente> listaCliente;
    
    public ClienteController() {
        Integer parameter = (Integer) ELFlash.getFlash().get(Constante.CLIENT_EDIT);

        if(parameter == null){
            labelAcaoBotao = Constante.SALVAR;
            cliente = new Cliente();
            cliente.setSituacao(Constante.SITUACAO_ATIVO);
            cliente.setSexo(Constante.SEXO_FEMININO);
        } else {
            labelAcaoBotao = Constante.ALTERAR;
            try {
                cliente = new ClienteBO().findById(parameter);
                this.idEstadoResidemcial = this.cliente.getEnderecoresidencia().getMunicipio().getEstado().getIdEstado();
                if(this.cliente.getEnderecotrabalho() != null){
                    this.idEstadoComercial = this.cliente.getEnderecotrabalho().getMunicipio().getEstado().getIdEstado();
                }
            } catch (Exception e) {
                JsfUtil.mensagemErro(e);
                e.printStackTrace(System.err);
            }
        }

        try {
            listaEstado = new EstadoBO().listEstados();
        } catch (Exception e) {
            JsfUtil.mensagemErro(e);
        }
        
        if(listaEstado == null) {
            return;
        }
        
        if(idEstadoResidemcial == null) {
            idEstadoComercial = listaEstado.get(0).getIdEstado();
            idEstadoResidemcial = listaEstado.get(0).getIdEstado();
        }
        
        carregarMunicipiosEndComercial();
        carregarMunicipiosEndResidencial();
        
        this.idMunicipioResidencial = this.cliente.getEnderecoresidencia().getMunicipio().getIdMunicipio();
        if(this.cliente.getEnderecotrabalho() != null){
            this.idMunicipioComercial = this.cliente.getEnderecotrabalho().getMunicipio().getIdMunicipio();
        }
    }
    
    public void salvaAtualizar(){
        try {
            this.cliente.getUsuario().setSenha(this.senha1);
            
            if(this.cliente.getEnderecotrabalho().getRua().isEmpty() && this.cliente.getEnderecotrabalho().getBairo().isEmpty()) {
                this.cliente.setEnderecotrabalho(null);
            } else {
                this.cliente.getEnderecotrabalho().getMunicipio().setIdMunicipio(idMunicipioComercial);
            }
            
            this.cliente.getEnderecoresidencia().getMunicipio().setIdMunicipio(idMunicipioResidencial);
            
            if(this.cliente.getIdPessoa() == null) {
                this.cliente.getConta().setDataultimomov(new Date());
                this.cliente.getConta().setTipoultmov(Constante.MOVIMENTO_CREDITO_EM_CONTA);
                this.cliente.getConta().setValor(BigDecimal.ZERO);
            }
            
            new ClienteBO().salvarAtualizar(cliente);
            this.cliente = new Cliente();

            JsfUtil.mostrarMensagem(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso", "Cliente gravado com sucesso."));
            
            if(this.labelAcaoBotao.equals(Constante.ALTERAR)) {
                JsfUtil.redirect("/faces/paginas/restrito/lista_cliente.xhtml");
            } else {
                JsfUtil.redirect("");
            }
        } catch (Exception e) {
            e.printStackTrace(System.err);
            JsfUtil.mensagemErro(e);
        }
    }
    
    public void editarItem() {
        System.out.println(this.cliente.getIdPessoa());
        if(this.cliente.getIdPessoa() != null){
            ELFlash.getFlash().put(Constante.CLIENT_EDIT, this.cliente.getIdPessoa());
            JsfUtil.redirect("cadastro_cliente.xhtml");
        }
    }
    
    public void cancelarInsercao() {
        JsfUtil.redirect("cadastro_cliente.xhtml");
    }
    
    public void carregarMunicipiosEndResidencial() {
        try {
            listaMunicipioResidencial = new MunicipioBO().listMunicipio(idEstadoResidemcial);
            this.idMunicipioResidencial = listaMunicipioResidencial.get(0).getIdMunicipio();
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(Constante.LISTA_MUNICIPIO_RESIDENCIAL, listaMunicipioResidencial);
        } catch (Exception e) {
            JsfUtil.mensagemErro(e);
        }
    }
    
    public void carregarMunicipiosEndComercial() {
        try {
            if(idEstadoComercial == null) {
                idEstadoComercial = this.listaEstado.get(0).getIdEstado();
            }
            listaMunicipioComercial = new MunicipioBO().listMunicipio(idEstadoComercial);
            this.idMunicipioComercial = listaMunicipioComercial.get(0).getIdMunicipio();
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(Constante.LISTA_MUNICIPIO_COMERCIAL, listaMunicipioComercial);
        } catch (Exception e) {
            JsfUtil.mensagemErro(e);
        }
    }

    public Integer getIdEstadoResidemcial() {
        return idEstadoResidemcial;
    }

    public void setIdEstadoResidemcial(Integer idEstadoResidemcial) {
        this.idEstadoResidemcial = idEstadoResidemcial;
    }

    public Integer getIdEstadoComercial() {
        return idEstadoComercial;
    }

    public void setIdEstadoComercial(Integer idEstadoComercial) {
        this.idEstadoComercial = idEstadoComercial;
    }

    public List<Municipio> getListaMunicipioResidencial() {
        return listaMunicipioResidencial;
    }

    public void setListaMunicipioResidencial(List<Municipio> listaMunicipioResidencial) {
        this.listaMunicipioResidencial = listaMunicipioResidencial;
    }

    public List<Municipio> getListaMunicipioComercial() {
        return listaMunicipioComercial;
    }

    public void setListaMunicipioComercial(List<Municipio> listaMunicipioComercial) {
        this.listaMunicipioComercial = listaMunicipioComercial;
    }

    public List<Estado> getListaEstado() {
        return listaEstado;
    }

    public void setListaEstado(List<Estado> listaEstado) {
        this.listaEstado = listaEstado;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public String getLabelAcaoBotao() {
        return labelAcaoBotao;
    }

    public void setLabelAcaoBotao(String labelAcaoBotao) {
        this.labelAcaoBotao = labelAcaoBotao;
    }

    public String getSenha1() {
        return senha1;
    }

    public void setSenha1(String senha1) {
        this.senha1 = senha1;
    }

    public String getSenha2() {
        return senha2;
    }

    public void setSenha2(String senha2) {
        this.senha2 = senha2;
    }

    public Integer getIdMunicipioResidencial() {
        return idMunicipioResidencial;
    }

    public void setIdMunicipioResidencial(Integer idMunicipioResidencial) {
        this.idMunicipioResidencial = idMunicipioResidencial;
    }

    public Integer getIdMunicipioComercial() {
        return idMunicipioComercial;
    }

    public void setIdMunicipioComercial(Integer idMunicipioComercial) {
        this.idMunicipioComercial = idMunicipioComercial;
    }

    public List<Cliente> getListaCliente() {
        if(this.listaCliente == null) {
            try {
                this.listaCliente = new ClienteBO().findAll();
            } catch (Exception e) {
                JsfUtil.mensagemErro(e);
                e.printStackTrace(System.err);
            }
        }
        return listaCliente;
    }

    public void setListaCliente(List<Cliente> listaCliente) {
        this.listaCliente = listaCliente;
    }
    
}

Qualquer ajuda é muito bem vinda, desde ja muito obrigado…

2 Respostas

aprendizweb

Ja tentou trocar seu @ViewScoped pelo @SessionScoped em seu bean?

CristianPalmaSola10

Valeu amigo pela ajuda, mas nem tentei utilizar sua dica, ja consegui resolver, na tela de cadastro o componente textarea ligado a observacao, era um dos erros, o campo do bean é byte[] e naum string e tambem se o endereco estive nullo o objeto naum erra instanciado para ser usado dando um new no objeto resolveu, valeu pela dica ate mais

Criado 26 de outubro de 2012
Ultima resposta 26 de out. de 2012
Respostas 2
Participantes 2