Cliente com vários endereços
Alguém teria um exemplo de cadastro de cliente com, pelo menos, dois endereços usando java, hibernate e jsf que possa indicar?
Sgrandini
Curtidas 0
Respostas
Robson Teixeira
28/07/2015
Bom Dia,
Segue abaixo um modelo de ManagedBean que permite você realizar as operações que você deseja.
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;
}
}
GOSTEI 0
Ronaldo Lanhellas
28/07/2015
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.
GOSTEI 0
Sgrandini
28/07/2015
Olá Ronaldo,
meu bean Cliente está assim:
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:
Este é o bean Endereco:
A página de cadastro de Endereços é esta:
Quando tento salvar o endereço, dá este erro:
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.
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.
GOSTEI 0
Ronaldo Lanhellas
28/07/2015
Primeiramente você deve adicionar uma atributo "cliente" no seu EnderecoBean e muda o método novo(), assim:
Depois disso você deve alterar o commandButton que dispara esse listener:
Agora teste e retorne dizendo se funcionou.
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.
GOSTEI 0
Ronaldo Lanhellas
28/07/2015
Primeiramente você deve adicionar uma atributo "cliente" no seu EnderecoBean e muda o método novo(), assim:
Depois disso você deve alterar o commandButton que dispara esse listener:
Agora teste e retorne dizendo se funcionou.
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.
GOSTEI 0
Sgrandini
28/07/2015
Infelizmente, dá o mesmo erro.
GOSTEI 0