Fórum Cliente com vários endereços #527142
28/07/2015
0
Sgrandini
Curtir tópico
+ 0Posts
30/07/2015
Robson Teixeira
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
03/08/2015
Ronaldo Lanhellas
Pergunta muito genérica, poste o que você já tem para que possamos ajudar.
Gostei + 0
04/08/2015
Sgrandini
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
06/08/2015
Ronaldo Lanhellas
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
06/08/2015
Ronaldo Lanhellas
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
06/08/2015
Sgrandini
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)