GARANTIR DESCONTO

Fórum Cliente com vários endereços #527142

28/07/2015

0

Alguém teria um exemplo de cadastro de cliente com, pelo menos, dois endereços usando java, hibernate e jsf que possa indicar?
Sgrandini

Sgrandini

Responder

Posts

30/07/2015

Robson Teixeira

Bom Dia,
Segue abaixo um modelo de ManagedBean que permite você realizar as operações que você deseja.

@ManagedBean
@ViewScoped
public class BeanCliente {
    private Cliente cliente;
    private List<Endereco> enderecos;
    
    
    public void salvarCliente(){
        getCliente().setEnderecos(getEnderecos());
        //aki você chamará a sua Classe de servico para que possa processar alguma
        //regra
    }
    
    public void addNovoEndereco(){
        enderecos.add(new Endereco());
    }
    
    public void removerEndereco(Endereco endeco){
        //condição para garantir pelo menos 2 enderecos
        if(getEnderecos().size()>2){
            getEnderecos().remove(endeco);
        }
    }
    
    public Cliente getCliente() {
        if(cliente==null){
            cliente=new Cliente();
        }
        return cliente;
    }

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

    public List<Endereco> getEnderecos() {
        if(enderecos==null){
            enderecos=new ArrayList<Endereco>();
            enderecos.add(new Endereco());
            enderecos.add(new Endereco());
        }
        return enderecos;
    }

    public void setEnderecos(List<Endereco> enderecos) {
        this.enderecos = enderecos;
    }
    
    
}
Responder

Gostei + 0

03/08/2015

Ronaldo Lanhellas

Alguém teria um exemplo de cadastro de cliente com, pelo menos, dois endereços usando java, hibernate e jsf que possa indicar?


Pergunta muito genérica, poste o que você já tem para que possamos ajudar.
Responder

Gostei + 0

04/08/2015

Sgrandini

Olá Ronaldo,

meu bean Cliente está assim:
@ManagedBean(name = "clienteBean")
@RequestScoped
public class ClienteBean {
 
    private Cliente cliente = new Cliente();
    private List<Cliente> lista;
    private List<Pessoa> pessoas;
    private List<Sexo> sexos;
    private List<EstadoCivil> estadoscivis;
    private List<Endereco> enderecos;   
    private List<Telefone> telefones;
    private List<Email> emails;
    private List<Corretor> corretores;
    private List<Profissao> profissoes;    
  
    public String novo() {
        this.cliente = new Cliente();
        return "/restrito/CadastroCliente";
    }

    public String editar() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        if (this.cliente.isAtivo()) {
           return "/restrito/CadastroCliente"; 
        }
        else {
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Cliente inativo. Não pode ser alterado.", ""));
        
            return null; 
        }
    }    
    
    public String salvar() {       
        FacesContext facesContext = FacesContext.getCurrentInstance();
        
        this.cliente.setAtivo(true);
        
        ClienteRN clienteRN = new ClienteRN();
        clienteRN.salvar(this.cliente);
        
        facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente salvo com sucesso!", ""));
       
        return null;     
    }
        
    public String ativar() {
        if (this.cliente.isAtivo()) {
            this.cliente.setAtivo(false);
        }
        else {
            this.cliente.setAtivo(true);
        }

        ClienteRN clienteRN = new ClienteRN();
        clienteRN.salvar(this.cliente);
        return null;
    }
    
    public boolean isEditando() {
        return this.cliente.getCodigo() != null;
    }       

    public Cliente getCliente() {
        return cliente;
    }

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

    public List<Cliente> getLista() {
        if (this.lista == null) {
            ClienteRN clienteRN = new ClienteRN();
            this.lista = clienteRN.listar();
        }
        return lista;
    }
    
    public List<Pessoa> getPessoas() {
	return pessoas = Arrays.asList(Pessoa.values());
    }  
    
    public List<Sexo> getSexos() {
	return sexos = Arrays.asList(Sexo.values());
    } 

    public List<EstadoCivil> getEstadoscivis() {
        return estadoscivis = Arrays.asList(EstadoCivil.values());
    }

    public List<Endereco> getEnderecos() {
        if (this.enderecos == null) {
            EnderecoRN enderecoRN = new EnderecoRN();
            this.enderecos = enderecoRN.listar();
        }
        return enderecos;
    }

    public List<Telefone> getTelefones() {
        if (this.telefones == null) {
            TelefoneRN telefoneRN = new TelefoneRN();
            this.telefones = telefoneRN.listar();
        }
        return telefones;
    }
    
    public List<Email> getEmails() {
        if (this.emails == null) {
            EmailRN emailRN = new EmailRN();
            this.emails = emailRN.listar();
        }
        return emails;
    } 

    public List<Corretor> getCorretores() {
        if (this.corretores == null) {
            CorretorRN corretorRN = new CorretorRN();
            this.corretores = corretorRN.listar();
        }
        return corretores;
    }   
    
    public List<Profissao> getProfissoes() {
        if (this.profissoes == null) {
            ProfissaoRN profissaoRN = new ProfissaoRN();
            this.profissoes = profissaoRN.listar();
        }
        return profissoes;
    } 
}    


A página de cadastro de Cliente possui o botão "Adicionar Endereço" que faz a chamada a tela de cadastro de Endereço. Ela está assim:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
    
    <h:head>
        <title>Cadastro de cliente</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <h:outputStylesheet library="css" name="sistema.css" />
        <h:outputScript library="jscript" name="locale-primefaces.js" />
    </h:head>
    <h:body>  	
        <header>
            <div style="float: right; margin-right: 110px">
		<h:form style="display: inline-block">                                   
                    <ui:include src="/template/Menu_Sistema.xhtml"/>
		</h:form>
            </div>
            <div style="clear: both"></div>
	</header>    

        <h:form id="frmCadastro" acceptcharset="ISO-8859-1"> 
            
            <h1>#{clienteBean.editando ? 'Edição de cliente' : 'Novo cliente'}</h1>
            
            <p:growl id="growl" autoUpdate="true" sticky="true"/>
        
            <p:toolbar style="margin-top: 20px">
                <p:toolbarGroup>
                    <p:button value="Novo" outcome="/restrito/CadastroCliente" icon="ui-icon-plusthick"/>
                    <p:commandButton value="Salvar" action="#{clienteBean.salvar()}" ajax="false" update="@form" icon="ui-icon-disk"/>  
                </p:toolbarGroup>
                
                <p:toolbarGroup align="right">
                    <p:button value="Pesquisar" outcome="/restrito/ConsultaClientes" icon="ui-icon-search"/>
                </p:toolbarGroup>
            </p:toolbar>
        
            <p:fieldset id="pnlDadosPessoais" legend="Dados Pessoais" style="margin-top: 20px">
            
                <p:focus context="pnlDadosPessoais"/>
            
                <h:inputHidden id="codigo" value="#{clienteBean.cliente.codigo}" />
                <h:inputHidden id="ativo" value="#{clienteBean.cliente.ativo}" />
            
                <p:panelGrid columns="4" style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo, rotulo campo">                
                    <p:outputLabel value="Corretor Responsável:" />
                    <p:selectOneMenu id="corretor" value="#{clienteBean.cliente.corretor}" required="true" requiredMessage="Corretor deve ser informado." immediate="true"
                                    converter="corretorConverter">
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{clienteBean.corretores}" var="corretor" itemLabel="#{corretor.nome}" itemValue="#" />    
                    </p:selectOneMenu>
                
                    <p:outputLabel value="Data do Cadastro:" />
                    <p:outputLabel id="datacadastro" value="#{clienteBean.cliente.datacadastro}">
                        <f:convertDateTime pattern="dd/MM/yyyy" type="date"/>
                    </p:outputLabel>                
          
                    <p:outputLabel value="Nome:" />
                    <p:inputText id="nome" value="#{clienteBean.cliente.nome}" label="Nome" size="80" required="true" requiredMessage="Nome deve ser informado." immediate="true"/>
                
                    <p:outputLabel value="Data Nascimento:" />
                    <p:calendar id="nascimento" value="#{clienteBean.cliente.nascimento}" pattern="dd/MM/yyyy" mask="true" label="Nascimento" size="8" 
                                required="true" requiredMessage="Data de Nascimento deve ser informada." converterMessage="Data no formato inválido. Utilize dd/mm/aaaa">
                    </p:calendar>                 
                               
                    <p:outputLabel value="Pessoa:" />
                    <p:selectOneRadio id="pessoa" value="#{clienteBean.cliente.pessoa}" label="Pessoa" required="true" requiredMessage="Tipo de Pessoa deve ser informado." immediate="true">
                        <f:selectItems value="#{clienteBean.pessoas}" var="pessoa" itemLabel="#{pessoa.descricao}" itemValue="#"/>
                        <p:ajax event="change" update="pnlDocumentacao" process="@this"/>
                    </p:selectOneRadio>
 
                    <p:outputLabel value="Estado Civil:" for="estadocivil"/>
                    <p:selectOneMenu id="estadocivil" value="#{clienteBean.cliente.estadocivil}">
                        <f:selectItems value="#{clienteBean.estadoscivis}" var="estadocivil" itemLabel="#{estadocivil.descricao}" itemValue="#"/>
                    </p:selectOneMenu>  
                
                    <p:outputLabel value="Sexo:" for="sexo"/>
                    <p:selectOneRadio id="sexo" value="#{clienteBean.cliente.sexo}">
                        <f:selectItems value="#{clienteBean.sexos}" var="sexo" itemLabel="#{sexo.descricao}" itemValue="#"/>
                    </p:selectOneRadio>                
                
                    <p:outputLabel value="Profissão:" />
                    <p:selectOneMenu id="profissao" value="#{clienteBean.cliente.profissao}" label="Profissao" required="true" requiredMessage="Profissão deve ser informada." 
                                    immediate="true" converter="profissaoConverter">                          
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{clienteBean.profissoes}" var="profissao" itemValue="#" itemLabel="#{profissao.descricao}" />
                    </p:selectOneMenu>
                </p:panelGrid>         
            </p:fieldset>
        
            <p:fieldset legend="Documentação" id="pnlDocumentacao" style="margin-top: 10px">                    
                <h:panelGrid columns="10" cellpadding="5" columnClasses="rotulo, campo">                                  
                    <p:outputLabel id="cpfcnpj" value="#{clienteBean.cliente.pessoa.descricao == 'Jurídica'? 'CNPJ:' : 'CPF:'}" />
                    <p:inputMask id="cpf" mask="#{clienteBean.cliente.pessoa.descricao == 'Jurídica'? '99.999.999/9999-99' : '999.999.999-99'}" 
                                value="#{clienteBean.cliente.cpf}" required="true" requiredMessage="CPF / CNPJ deve ser informado." size="15" immediate="true" /> 
                
                    <p:outputLabel value="Tipo Documento:" />
                    <p:selectOneMenu id="tipodoc" value="#{clienteBean.cliente.tipodoc}" style="width:160px" required="true" requiredMessage="Tipo de Documento deve ser informado." immediate="true">
                        <f:selectItem itemLabel="RG" itemValue="RG" />
                        <f:selectItem itemLabel="RNE" itemValue="RNE" />
                        <f:selectItem itemLabel="DOCTO DE CLASSE" itemValue="DOCTO DE CLASSE" />
                    </p:selectOneMenu>
                
                    <p:outputLabel value="Nº Documento:" />
                    <p:inputMask mask="999?999999999999" id="numdoc" value="#{clienteBean.cliente.numdoc}" size="15" 
                                required="true" requiredMessage="Nº Documento deve ser informado." immediate="true"/>
            
                    <p:outputLabel value="Órgão Emissor:" />
                    <p:inputText id="orgaodoc" value="#{clienteBean.cliente.orgaodoc}" size="10" required="true" requiredMessage="Órgão Emissor deve ser informado." immediate="true"
                                onkeydown="this.value = this.value.toUpperCase();" onkeyup="this.value = this.value.toUpperCase()"/>
                    
                    <p:outputLabel value="Emissão/Validade:" />
                    <p:calendar id="datadoc" value="#{clienteBean.cliente.datadoc}" pattern="dd/MM/yyyy" mask="true" size="8" required="true" 
                            requiredMessage="Data de Emissão/Validade deve ser informada." converterMessage="Data no formato inválido. Utilize dd/mm/aaaa">
                    </p:calendar>                   
                </h:panelGrid>
            </p:fieldset>
        
            <p:fieldset legend="CNH" style="margin-top: 10px" toggleable="true">            
                <h:panelGrid columns="8" cellpadding="5" columnClasses="rotulo, campo">
                    <p:outputLabel value="Nº Registro:" />
                    <p:inputMask mask="999?999999999999" id="numcnh" value="#{clienteBean.cliente.numcnh}" size="15" />
                
                    <p:outputLabel value="Validade: " />
                    <p:calendar id="validadecnh" value="#{clienteBean.cliente.validadecnh}" pattern="dd/MM/yyyy" mask="true" size="8" 
                                converterMessage="Data no formato inválido. Utilize dd/mm/aaaa">
                    </p:calendar>                 
                
                    <p:outputLabel value="Categoria:" />
                    <p:inputText id="categoriacnh" value="#{clienteBean.cliente.categoriacnh}" size="5" 
                                onkeydown="this.value = this.value.toUpperCase();" onkeyup="this.value = this.value.toUpperCase()"/>
            
                    <p:outputLabel value="Primeira Habilitação: " />
                    <p:calendar id="primeiracnh" value="#{clienteBean.cliente.primeiracnh}" pattern="dd/MM/yyyy" mask="true" size="8" 
                                converterMessage="Data no formato inválido. Utilize dd/mm/aaaa">
                    </p:calendar>                                    
                </h:panelGrid>
            </p:fieldset>
            
            <p:tabView dynamic="true" cache="false" style="margin-top: 20px">                
                <p:tab title="Endereços">                    

                    <p:commandButton id="botaAdicionarEndereco" action="#{enderecoBean.novo()}" value="Adicionar Endereço" icon="ui-icon-plusthick" style="margin-top: 10px"> 
                        <f:setPropertyActionListener target="#{clienteBean.cliente}" value="#" /> 
                    </p:commandButton>
                    
                    <p:dataTable value="#{clienteBean.enderecos}" var="endereco" id="enderecosTable" style="margin-top: 10px" rows="2" paginator="true" paginatorAlwaysVisible="false" 
                                 paginatorPosition="bottom" rendered="#{!empty clienteBean.enderecos}" emptyMessage="Nenhum endereço encontrado.">
                     
                        <p:column headerText="Tipo" style="text-align: left; width: 50%">
                            <h:outputText value="#{endereco.tipoendereco}" />
                        </p:column>    
                    
                        <p:column headerText="Logradouro" style="text-align: left; width: 100%"> 
                            <h:outputText value="#{endereco.logradouro}" />
                        </p:column>
                
                        <p:column headerText="Número" style="text-align: center; width: 30%">
                            <h:outputText value="#{endereco.numero}" /> 
                        </p:column>    
                
                        <p:column headerText="Complemento" style="text-align: left; width: 40%">
                            <h:outputText value="#{endereco.complemento}" />
                        </p:column>
                    
                        <p:column headerText="Bairro" style="text-align: left; width: 60%">
                            <h:outputText value="#{endereco.bairro}" />
                        </p:column>    
                    
                        <p:column headerText="Cidade" style="text-align: left; width: 70%">
                            <h:outputText value="#{endereco.cidade}" />
                        </p:column>    
                    
                        <p:column headerText="UF" style="text-align: center; width: 20%">
                            <h:outputText value="#{endereco.uf}" />
                        </p:column>    
  
                        <p:column headerText="CEP" style="text-align: center; width: 30%">
                            <h:outputText value="#{endereco.cep}" /> 
                        </p:column>
                    
                        <p:column style="text-align: center; width: 30%"> 
                            <p:commandButton title="Editar" action="#{enderecoBean.editar()}" ajax="false" icon="ui-icon-pencil">
                                <f:setPropertyActionListener target="#{enderecoBean.endereco}" value="#" />
                            </p:commandButton>    
 
                            <p:commandButton title="Excluir" action="#{enderecoBean.excluir()}" icon="ui-icon-trash" 
                                            onclick="if (!confirm('Confirma a exclusão do endereço?')) return false;">
                                <f:setPropertyActionListener target="#{enderecoBean.endereco}" value="#" />
                            </p:commandButton>
                        </p:column>    
                    </p:dataTable>
                </p:tab>
                
                <p:tab title="Telefones">
                    <p:dataTable value="#{telefoneBean.lista}" var="telefone" id="telefonesTable"
                                style="margin-top: 10px" rows="2" paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
                                rendered="#{!empty telefoneBean.lista}" emptyMessage="Nenhum telefone encontrado.">
                     
                        <p:column headerText="Tipo" style="text-align: left; width: 30%">
                            <h:outputText id="tipotel" value="#{telefone.tipotelefone}" />
                        </p:column>    
                
                        <p:column headerText="Telefone" style="text-align: center; width: 30%">
                            <h:outputText id="telefone" value="#{telefone.numero}" /> 
                        </p:column>    
                
                        <p:column headerText="Observação" style="text-align: left; width: 100%"> 
                            <h:outputText id="observacao" value="#{telefone.observacao}" /> 
                        </p:column>    
                        <p:column style="text-align: center; width: 20%"> 
                            <p:commandButton title="Editar" action="#{telefoneBean.editar()}" ajax="false" icon="ui-icon-pencil">
                                <f:setPropertyActionListener target="#{telefoneBean.telefone}" value="#" />
                            </p:commandButton>    
 
                            <p:commandButton title="Excluir" action="#{telefoneBean.excluir()}" icon="ui-icon-trash" 
                                            onclick="if (!confirm('Confirma a exclusão do telefone?')) return false;">
                                <f:setPropertyActionListener target="#{telefoneBean.telefone}" value="#" />
                            </p:commandButton>
                        </p:column>    
                    </p:dataTable>
                    <p:commandButton value="Novo" action="#{telefoneBean.novo()}" ajax="false"  icon="ui-icon-plusthick" style="margin-top: 10px"/>                     
                </p:tab>
                
                <p:tab title="E-mails">
                    <p:dataTable value="#{clienteBean.emails}" var="email" id="tabelaEmails" rendered="#{!empty clienteBean.emails}"
                                style="margin-top: 10px" emptyMessage="Nenhum email encontrado." rows="2"
                                paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom">
                     
                        <p:column headerText="Tipo" style="text-align: center; width: 100px">
                            <h:outputText id="tipoemail" value="#{email.tipoemail}" />
                        </p:column>    
                
                        <p:column headerText="Email" style="text-align: center">
                            <h:outputText id="email" value="#{email.email}" /> 
                        </p:column>    
                
                        <p:column headerText="Observação" style="text-align: center"> 
                            <h:outputText id="obs" value="#{email.observacao}" /> 
                        </p:column>    
                        <p:column> 
                            <p:commandButton title="Editar" action="#{emailBean.editar()}" ajax="false" icon="ui-icon-pencil">
                                <f:setPropertyActionListener target="#{emailBean.email}" value="#" />
                            </p:commandButton>    
 
                            <p:commandButton title="Excluir" action="#{emailBean.excluir()}" icon="ui-icon-trash"
                                            onclick="if (!confirm('Confirma a exclusão do e-mail?')) return false;">
                                <f:setPropertyActionListener target="#{emailBean.email}" value="#" />
                            </p:commandButton>
                        </p:column>    
                    </p:dataTable>
                    <p:commandButton value="Novo" action="#{emailBean.novo()}" ajax="false"  icon="ui-icon-plusthick" style="margin-top: 10px"/>                    
                </p:tab>
                
                <p:tab title="Anexos">
                    <br/>
                    <p:button value="Novo" outcome="/restrito/CadastroArquivo" icon="ui-icon-plusthick"/>                               
                </p:tab>                
            </p:tabView>
        </h:form>
    </h:body>
</html>


Este é o bean Endereco:
package com.projetofinalweb.endereco;

import com.projetofinalweb.cliente.Cliente;
import com.projetofinalweb.cliente.ClienteRN;
import com.projetofinalweb.util.RNException;
import java.util.Arrays;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.*;
import javax.faces.context.FacesContext;

@ManagedBean(name="enderecoBean")
@RequestScoped
public class EnderecoBean {
    
    private Endereco endereco = new Endereco();
    private List<Endereco> lista = null;    
    private List<TipoEndereco> tiposEndereco;
    private List<UFEndereco> ufs;
    private List<Cliente> clientes;
    
    public String novo() {
        this.endereco = new Endereco();
        return "/restrito/CadastroEndereco";        
    }
    
    public String editar() {
        return "/restrito/CadastroEndereco";
    }
    
    public String salvar() {

        FacesContext facesContext = FacesContext.getCurrentInstance();
        
        EnderecoRN enderecoRN = new EnderecoRN();
        enderecoRN.salvar(this.endereco);
        
        facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço salvo com sucesso!", ""));
              
        return null;
    }
    
    public String excluir() throws RNException {
        
        EnderecoRN enderecoRN = new EnderecoRN();
        enderecoRN.excluir(this.endereco);
        
        this.lista = null;
        return null;
    }    

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }
    
    public List<Endereco> getLista() {
        if (this.lista == null) {
            EnderecoRN enderecoRN = new EnderecoRN();
            this.lista = enderecoRN.listar();
        }
        return lista;
    }

    public List<TipoEndereco> getTiposEndereco() {
        return tiposEndereco = Arrays.asList(TipoEndereco.values());
    }

    public List<UFEndereco> getUfs() {
        return ufs = Arrays.asList(UFEndereco.values());
    }

    public List<Cliente> getClientes() {       
        if (this.clientes == null) {
            ClienteRN clienteRN = new ClienteRN();
            this.clientes = clienteRN.listar();
        }        
        return clientes;
    }
    
    public boolean isEditando() {
        return this.endereco.getCodendereco() != null;
    }    
    
}


A página de cadastro de Endereços é esta:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Cadastro de Endereço</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
        <h:outputStylesheet library="css" name="sistema.css" />
    </h:head>
    <h:body>  
	
        <header>
            <div style="float: right; margin-right: 110px">
		<h:form style="display: inline-block">                                   
                    <ui:include src="/template/Menu_Sistema.xhtml"/>
		</h:form>
            </div>
            <div style="clear: both"></div>
	</header>        
        
    <h:form id="frmCadastro" acceptcharset="ISO-8859-1">
        
        <h1>#{enderecoBean.editando ? 'Edição de endereço' : 'Novo endereço'}</h1>
        
        <p:growl id="growl" autoUpdate="true" sticky="true"/>        
        
        <p:toolbar style="margin-top: 20px">
            <p:toolbarGroup>
                <p:commandButton action="#{enderecoBean.novo()}" value="Novo" ajax="false" icon="ui-icon-plusthick"/>
                <p:commandButton action="#{enderecoBean.salvar()}" value="Salvar" ajax="false" update="@frmCadastro" icon="ui-icon-disk"/>
	    </p:toolbarGroup>
            <p:toolbarGroup align="right">
                <p:button value="Pesquisar" outcome="/restrito/ConsultaClientes" icon="ui-icon-arrowreturnthick-1-w"/>
	    </p:toolbarGroup>            
	</p:toolbar> 

        <p:fieldset legend="Dados do Endereço" style="margin-top: 20px">
                       
            <h:inputHidden id="codigo" value="#{enderecoBean.endereco.codendereco}" />
            
            <p:panelGrid columns="2" style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">                          
                
                <p:outputLabel value="Tipo de Endereço:" />
                <p:selectOneMenu id="tipoEndereco" value="#{enderecoBean.endereco.tipoendereco}" label="Tipo de Endereço" required="true" requiredMessage="Tipo de Endereço deve ser informado." immediate="true">
                    <f:selectItem itemLabel="Selecione" />
                    <f:selectItems value="#{enderecoBean.tiposEndereco}" var="tipoEndereco" itemLabel="#{tipoEndereco.descricao}" itemValue="#"/>
                </p:selectOneMenu> 
                
                <p:outputLabel value="Logradouro:" />
                <p:inputText id="log" value="#{enderecoBean.endereco.logradouro}" required="true" label="Logradouro" size="60" requiredMessage="Logradouro deve ser informado." immediate="true"/>
                
                <p:outputLabel value="Número:" />
                <p:inputMask mask="9?999999999" value="#{enderecoBean.endereco.numero}" required="true" label="Nº" size="10" maxlength="10" requiredMessage="Número deve ser informado." immediate="true"/>
 
                <p:outputLabel value="Complemento:" />
                <p:inputText value="#{enderecoBean.endereco.complemento}" size="50" maxlength="20" />
 
                <p:outputLabel value="Bairro:" />
                <p:inputText value="#{enderecoBean.endereco.bairro}" label="Bairro" required="true" size="50" maxlength="50" requiredMessage="Bairro deve ser informado." immediate="true"/>
 
                <p:outputLabel value="Cidade:" />
                <p:inputText value="#{enderecoBean.endereco.cidade}" label="Cidade" required="true" size="50" maxlength="50" requiredMessage="Cidade deve ser informada." immediate="true"/>                
                
                <p:outputLabel value="UF:" />
                <p:selectOneMenu id="uf" value="#{enderecoBean.endereco.uf}" required="true" requiredMessage="UF deve ser informado." immediate="true">
                    <f:selectItem itemLabel="Selecione" />
                    <f:selectItems value="#{enderecoBean.ufs}" var="uf" itemLabel="#{uf.descricao}" itemValue="#"/>
                </p:selectOneMenu>
                
                <p:outputLabel value="CEP:" />
                <p:inputMask id="cep" mask="99999-999" value="#{enderecoBean.endereco.cep}" required="true" size="10" maxlength="10" requiredMessage="CEP deve ser informado." immediate="true"/>
                
            </p:panelGrid>
        </p:fieldset>              
    </h:form>

</h:body>
</html>


Quando tento salvar o endereço, dá este erro:

HTTP Status 500 - javax.servlet.ServletException: org.hibernate.PropertyValueException: not-null property references a null or transient value : com.projetofinalweb.endereco.Endereco.cliente

type Exception report

message javax.servlet.ServletException: org.hibernate.PropertyValueException: not-null property references a null or transient value : com.projetofinalweb.endereco.Endereco.cliente

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.servlet.ServletException: org.hibernate.PropertyValueException: not-null property references a null or transient value : com.projetofinalweb.endereco.Endereco.cliente
	com.projetofinalweb.util.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:48)
root cause

javax.servlet.ServletException: org.hibernate.PropertyValueException: not-null property references a null or transient value : com.projetofinalweb.endereco.Endereco.cliente
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
	com.projetofinalweb.util.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:31)
root cause

javax.faces.el.EvaluationException: org.hibernate.PropertyValueException: not-null property references a null or transient value : com.projetofinalweb.endereco.Endereco.cliente
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
	javax.faces.component.UICommand.broadcast(UICommand.java:315)
	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
	com.projetofinalweb.util.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:31)
root cause

org.hibernate.PropertyValueException: not-null property references a null or transient value : com.projetofinalweb.endereco.Endereco.cliente
	org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:106)
	org.hibernate.action.internal.AbstractEntityInsertAction.nullifyTransientReferencesIfNotAlready(AbstractEntityInsertAction.java:132)
	org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:86)
	org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:492)
	org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:197)
	org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:181)
	org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:216)
	org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324)
	org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
	org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)
	org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
	org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
	org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
	org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
	org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
	org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
	org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
	org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
	org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:606)
	org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356)
	com.sun.proxy.$Proxy35.save(Unknown Source)
	com.projetofinalweb.endereco.EnderecoDaoHibernate.salvar(EnderecoDaoHibernate.java:18)
	com.projetofinalweb.endereco.EnderecoRN.salvar(EnderecoRN.java:17)
	com.projetofinalweb.endereco.EnderecoBean.salvar(EnderecoBean.java:36)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:606)
	org.apache.el.parser.AstValue.invoke(AstValue.java:245)
	org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
	com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
	javax.faces.component.UICommand.broadcast(UICommand.java:315)
	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
	com.projetofinalweb.util.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:31)
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.15 logs.


Sei que o problema está na chave código do cliente da tabela Endereco. Não estou sabendo carregá-lo no momento de cadastrar o endereço, por isso na hora de gravar o registro o valor é null. Como não domino Java, estou tendo essa dificuldade. Mas como faz parte do meu projeto final, preciso implementar essa funcionalidade.
Responder

Gostei + 0

06/08/2015

Ronaldo Lanhellas

Primeiramente você deve adicionar uma atributo "cliente" no seu EnderecoBean e muda o método novo(), assim:

private Cliente cliente;

//getter e setter para propriedade cliente

public String novo() {
        if (this.cliente == null){
          throw new RuntimeException("O cliente não pode ser nulo");
        }
        this.endereco = new Endereco();
        this.endereco.setCliente(this.cliente);
        return "/restrito/CadastroEndereco";        
    }



Depois disso você deve alterar o commandButton que dispara esse listener:

  <p:commandButton id="botaAdicionarEndereco" action="#{enderecoBean.novo()}" value="Adicionar Endereço" icon="ui-icon-plusthick" style="margin-top: 10px"> 
                   <f:setPropertyActionListener target="#{enderecoBean.cliente}" value="#{clienteBean.cliente}" /> 
   </p:commandButton>


Agora teste e retorne dizendo se funcionou.
Responder

Gostei + 0

06/08/2015

Ronaldo Lanhellas

Primeiramente você deve adicionar uma atributo "cliente" no seu EnderecoBean e muda o método novo(), assim:

private Cliente cliente;

//getter e setter para propriedade cliente

public String novo() {
        if (this.cliente == null){
          throw new RuntimeException("O cliente não pode ser nulo");
        }
        this.endereco = new Endereco();
        this.endereco.setCliente(this.cliente);
        return "/restrito/CadastroEndereco";        
    }



Depois disso você deve alterar o commandButton que dispara esse listener:

  <p:commandButton id="botaAdicionarEndereco" action="#{enderecoBean.novo()}" value="Adicionar Endereço" icon="ui-icon-plusthick" style="margin-top: 10px"> 
                   <f:setPropertyActionListener target="#{enderecoBean.cliente}" value="#{clienteBean.cliente}" /> 
   </p:commandButton>


Agora teste e retorne dizendo se funcionou.
Responder

Gostei + 0

06/08/2015

Sgrandini

Infelizmente, dá o mesmo erro.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar