Bem, eu tenho um cadastro de cliente com diversos dados, nele tem duas dialogs para cadastrar cep e para cadastrar bairro, que cadastram sem nenhum problema e o dialog fecha ao clicar no botao de cadastro e eh listado como deveria aparecer. O problema é que o cliente perde os valores que estavam nos campos (por exemplo, nome, cpf e tal) e queria saber porque isso esta acontecendo e como resolver : p. Vou colocar primeiro o codigo completo, depois as partes relevantes (que acho que sao pelo menos):
XHTML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<ui:composition template="/layout.xhtml">
<ui:define name="conteudo">
<h:form styleClass="jsfcrud_list_form">
<h:panelGroup
id="messagePanel"
layout="block">
<h:messages
errorStyle="color: red"
infoStyle="color: green"
layout="table" />
</h:panelGroup>
<h:panelGrid columns="2">
<h:column>
<!-- INICIO DOS DADOS BÁSICOS -->
<p:panel
id="dadosBase"
header="Dados Básicos">
<h:panelGrid
columns="2"
style="height: 300px; ">
<h:outputLabel value="Nome" />
<p:inputText
id="nome"
value="#{controleCliente.cliente.nome}" />
<h:outputLabel value="Código Interno" />
<p:inputText
id="codigo_interno"
value="#{controleCliente.cliente.codigo_interno}" />
<h:outputLabel value="Sexo" />
<h:selectOneRadio
id="sexo"
value="#{controleCliente.cliente.sexo}">
<f:selectItem
itemLabel="Masculino"
itemValue="M" />
<f:selectItem
itemLabel="Feminino"
itemValue="F" />
</h:selectOneRadio>
<h:outputLabel value="Tipo do Cliente" />
<h:selectOneRadio
id="tipo_cliente"
value="#{controleCliente.cliente.tipo_cliente}"
title="Selecione qual item deseja inserir CNPJ ou CPF.">
<f:selectItem
itemLabel="Fisico"
itemValue="F" />
<f:selectItem
itemLabel="Jurídico"
itemValue="J" />
<p:ajax
update="cpf_cnpj"
event="change" />
</h:selectOneRadio>
<h:outputLabel value="CPF/CNPJ:" />
<p:inputMask
id="cpf_cnpj"
value="#{controleCliente.cliente.cpf_cnpj}"
size="20"
mask="#{controleCliente.mascaraCpfCnpj}"
title="CNPJ se houver." />
<h:outputLabel value="RG:" />
<p:inputMask
id="rg"
value="#{controleCliente.cliente.rg}"
mask="9999999999999" />
<h:outputLabel value="Data de Nascimento:" />
<p:inputMask
id="data_nascimento"
value="#{controleCliente.cliente.data_nascimento}"
mask="99/99/9999">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
<h:outputLabel value="Telefone Fixo:" />
<p:inputMask
id="fixo"
value="#{controleCliente.cliente.telefone_fixo}"
mask="(99) 9999-9999" />
<h:outputLabel value="Celular:" />
<p:inputMask
id="celular"
value="#{controleCliente.cliente.celular}"
mask="(99) 9999-9999" />
<h:outputLabel value="Email" />
<p:inputText
id="email"
value="#{controleCliente.cliente.email}" />
</h:panelGrid>
</p:panel>
<!-- FIM DOS DADOS BASICOS -->
</h:column>
<h:column>
<!-- INICIO DO ENDERECO -->
<p:panel
id="cadastro"
header="Endereço">
<h:panelGrid
columns="2"
style="height: 300px; ">
<h:outputLabel value="Estado" />
<p:selectOneMenu
converter="estadoConverter"
id="estado"
value="#{controleMunicipio.municipio.estado}">
<f:selectItems
value="#{controleEstado.listaTodosEstadosSelecao}"
var="estado"
itemLabel="#{estado.sigla}"
itemValue="#{estado}" />
<p:ajax update="municipio" />
</p:selectOneMenu>
<h:outputLabel value="Municipio" />
<h:selectOneMenu
id="municipio"
value="#{controleBairro.bairro.municipio}"
converter="municipioConverter">
<f:selectItems
value="#{controleMunicipio.listaMunicipiosSelecao}"
var="municipio"
itemLabel="#{municipio.dsc}"
itemValue="#{municipio}" />
<p:ajax update="bairro" />
</h:selectOneMenu>
<h:outputLabel value="Bairro" />
<h:panelGrid columns="2">
<h:selectOneMenu
id="bairro"
value="#{controleCliente.cliente.bairro}"
converter="bairroConverter">
<f:selectItems
value="#{controleBairro.listaBairrosSelecao}"
var="bairro"
itemLabel="#{bairro.dsc}"
itemValue="#{bairro}" />
</h:selectOneMenu>
<p:commandButton
id="basic"
value="Novo"
onclick="dlg1.show();"
type="button" />
</h:panelGrid>
<h:outputLabel value="CEP" />
<p:inputMask
id="cep"
value="#{controleCep.cep.dsc}"
mask="99999-999">
<p:ajax update="logradouro" />
</p:inputMask>
<h:outputLabel value="Logradouro" />
<h:panelGrid columns="2">
<h:selectOneMenu
id="logradouro"
value="#{controleCliente.cliente.cep}"
converter="cepConverter">
<f:selectItems
value="#{controleCep.listaCepSelecao}"
var="cep"
itemLabel="#{cep.logradouro}"
itemValue="#{cep}" />
</h:selectOneMenu>
<p:commandButton
id="basic2"
value="Novo"
onclick="dlg2.show();"
type="button" />
</h:panelGrid>
<h:outputLabel value="Número" />
<p:inputText
id="numero"
value="#{controleCliente.cliente.numero}" />
<h:outputLabel value="Complemento" />
<p:inputText
id="complemento"
value="#{controleCliente.cliente.complemento}" />
</h:panelGrid>
</p:panel>
<!-- FIM DO ENDERECO -->
</h:column>
<h:column>
<!-- INICIO DAS INFORMAÇÕES EXTRAS -->
<p:panel
id="extras"
header="Informações Adicionais">
<h:panelGrid
columns="2"
style="height: 210px; ">
<h:outputLabel value="Pontuação" />
<p:inputText
disabled="true"
id="pontuacao"
value="#{controleCliente.cliente.pontuacao}" />
<h:outputLabel value="Observação" />
<p:inputTextarea
id="observacao"
value="#{controleCliente.cliente.observacao}" />
<h:outputLabel value="Crédito no Serasa" />
<h:selectBooleanCheckbox
id="situacao_credito_serasa"
value="#{controleCliente.cliente.situacao_credito_serasa}" />
<h:outputLabel value="Data de consulta do Serasa" />
<p:inputMask
id="data_consulta_serasa"
value="#{controleCliente.cliente.data_consulta_serasa}"
mask="99/99/9999">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
<h:outputLabel value="Crédito no SPC" />
<h:selectBooleanCheckbox
id="situacao_credito_spc"
value="#{controleCliente.cliente.situacao_credito_spc}" />
<h:outputLabel value="Data de consulta do SPC" />
<p:inputMask
id="data_consulta_spc"
value="#{controleCliente.cliente.data_consulta_spc}"
mask="99/99/9999">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
</h:panelGrid>
</p:panel>
<!-- FIM DAS INFORMAÇÕES EXTRAS -->
</h:column>
<h:column>
<!-- INICIO DO CADASTRO -->
<p:panel
id="endereco"
header="Informações de Cadastro">
<h:panelGrid
columns="2"
style="height: 210px; ">
<h:outputLabel value="Cliente que Indicou (código)" />
<p:inputText
disabled="#{controleCliente.cliente.alterar}"
id="codigo_interno_indicador"
value="#{controleCliente.cliente.cliente_indicador.codigo_interno}" />
<h:outputLabel value="Desativado?" />
<h:selectBooleanCheckbox
id="desativado"
value="#{controleCliente.cliente.desativado}" />
<h:outputLabel value="Data de Desativação:" />
<p:inputMask
disabled="true"
id="data_desativacao"
value="#{controleCliente.cliente.data_desativacao}"
mask="99/99/9999">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
<h:outputLabel value="Data da última alteração:" />
<p:inputMask
disabled="true"
id="data_alteracao"
value="#{controleCliente.cliente.data_alteracao}"
mask="99/99/9999">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
<h:outputLabel value="Data de Cadastro:" />
<p:inputMask
disabled="true"
id="data_cadastro"
value="#{controleCliente.cliente.data_cadastro}"
mask="99/99/9999">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
<h:outputLabel value="Empresa de Cadastro" />
<p:selectOneMenu
disabled="#{controleCliente.cliente.alterar}"
converter="empresaConverter"
id="empresa"
value="#{controleCliente.cliente.empresa_cadastro}">
<f:selectItems
value="#{controleEmpresa.listaTodasEmpresasSelecao}"
var="empresa"
itemLabel="#{empresa.razao_social}"
itemValue="#{empresa}" />
</p:selectOneMenu>
</h:panelGrid>
</p:panel>
<!-- FIM DO CADASTRO -->
</h:column>
</h:panelGrid>
<br />
<p:commandButton
action="#{controleCliente.salvar}"
ajax="false"
value="Cadastrar" />
</h:form>
<!-- Popup Cadastro Rua e Bairro (Tem que ficar fora do form para funcionar) -->
<p:dialog
id="basicDialog"
header="Novo Bairro"
widgetVar="dlg1">
<ui:include
src="#{controle.servidor}/bairro/CadastroBairroPnl.xhtml"></ui:include>
</p:dialog>
<p:dialog
id="basicDialog2"
header="Novo Logradouro"
widgetVar="dlg2">
<ui:include src="#{controleGeral.servidor}/cep/CadastroCepPnl.xhtml"></ui:include>
</p:dialog>
<!-- Fim dos Popups -->
</ui:define>
</ui:composition>
</h:body>
</html>
Agora somente as partes dos popups, botoes e dialogs (esta no outro, mas so para ficar mais facil de ver):
<h:outputLabel value="Municipio" />
<h:selectOneMenu
id="municipio"
value="#{controleBairro.bairro.municipio}"
converter="municipioConverter">
<f:selectItems
value="#{controleMunicipio.listaMunicipiosSelecao}"
var="municipio"
itemLabel="#{municipio.dsc}"
itemValue="#{municipio}" />
<p:ajax update="bairro" />
</h:selectOneMenu>
<h:outputLabel value="Bairro" />
<h:panelGrid columns="2">
<h:selectOneMenu
id="bairro"
value="#{controleCliente.cliente.bairro}"
converter="bairroConverter">
<f:selectItems
value="#{controleBairro.listaBairrosSelecao}"
var="bairro"
itemLabel="#{bairro.dsc}"
itemValue="#{bairro}" />
</h:selectOneMenu>
<p:commandButton
id="basic"
value="Novo"
onclick="dlg1.show();"
type="button" />
</h:panelGrid>
...
<h:outputLabel value="CEP" />
<p:inputMask
id="cep"
value="#{controleCep.cep.dsc}"
mask="99999-999">
<p:ajax update="logradouro" />
</p:inputMask>
<h:outputLabel value="Logradouro" />
<h:panelGrid columns="2">
<h:selectOneMenu
id="logradouro"
value="#{controleCliente.cliente.cep}"
converter="cepConverter">
<f:selectItems
value="#{controleCep.listaCepSelecao}"
var="cep"
itemLabel="#{cep.logradouro}"
itemValue="#{cep}" />
</h:selectOneMenu>
<p:commandButton
id="basic2"
value="Novo"
onclick="dlg2.show();"
type="button" />
...
<p:dialog
id="basicDialog"
header="Novo Bairro"
widgetVar="dlg1">
<ui:include
src="#{controle.servidor}/bairro/CadastroBairroPnl.xhtml"></ui:include>
</p:dialog>
<p:dialog
id="basicDialog2"
header="Novo Logradouro"
widgetVar="dlg2">
<ui:include src="#{controleGeral.servidor}/cep/CadastroCepPnl.xhtml"></ui:include>
</p:dialog>
O xhtml do CadastroBairroPnl.xhtml
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:panelGroup
id="messagePanel"
layout="block">
<h:messages
errorStyle="color: red"
infoStyle="color: green"
layout="table" />
</h:panelGroup>
<h:form styleClass="jsfcrud_list_form">
<p:panel
header="Cadastro"
style="margin-bottom:10px;border-top-color: #b2d5d6;">
<h:panelGrid columns="2">
<h:outputLabel value="Bairro" />
<p:inputText
id="dsc"
value="#{controleBairro.bairro.dsc}"
size="20">
</p:inputText>
<h:outputLabel value="Estado" />
<p:selectOneMenu
converter="estadoConverter"
id="estado"
value="#{controleMunicipio.municipio.estado}">
<f:selectItems
value="#{controleEstado.listaTodosEstadosSelecao}"
var="estado"
itemLabel="#{estado.sigla}"
itemValue="#{estado}" />
<p:ajax update="municipio" />
</p:selectOneMenu>
<h:outputLabel value="Municipio" />
<h:selectOneMenu
id="municipio"
value="#{controleBairro.bairro.municipio}"
converter="municipioConverter">
<f:selectItems
value="#{controleMunicipio.listaMunicipiosSelecao}"
var="municipio"
itemLabel="#{municipio.dsc}"
itemValue="#{municipio}" />
</h:selectOneMenu>
<br />
<p:commandButton
action="#{controleBairro.salvar}"
value="Cadastrar"
ajax="false" />
</h:panelGrid>
</p:panel>
</h:form>
</html>
O código do salvar do bairro (Ná pagina normal dele, ele cadastra normalmente e redireciona para a página de busca sem problemas.)
public String salvar() {
jpa.salvar(bairro);
listaBairro = jpa.buscarPorExemplo(bairro);
limpaDadosBean();
return "BuscaBairro.xhtml";
}
Então, alguma ideia do que está acontecendo? (Espero que tenha ficado claro a minha dúvida, qualquer coisa, so perguntar ^^ )
EDIT:
ControleBairro
package main.java.helloworld;
import g4flex.entidades.Bairro;
import g4flex.entidades.Municipio;
import g4flexattendant.servico.contrato.RepositorioJPA;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class ControleBairro extends Controle {
RepositorioJPA<Bairro> jpa = new RepositorioJPA<Bairro>();
Bairro bairro = new Bairro();
public List<Bairro> listaBairro = new ArrayList<Bairro>();
/**
* Método chamado para limpar os dados contidos no Bean antes de cadastrar
* um novo objeto
* */
public String preparaCadastrar() {
limpaDadosBean();
return "/bairro/CadastroBairro.jsf";
}
/**
* Método chamado para limpar os dados contidos no Bean antes de chamar a
* página de busca pelo menu
* */
public String preparaBusca() {
limpaDadosBean();
return "/bairro/BuscaBairro.jsf";
}
public String preparaAlterar() {
bairro.setAlterar(true);
return "/bairro/CadastroBairro.jsf";
}
public void limpaDadosBean() {
bairro = new Bairro();
bairro.setMunicipio(new Municipio());
bairro.setAlterar(false);
}
public String salvar() {
jpa.salvar(bairro);
listaBairro = jpa.buscarPorExemplo(bairro);
limpaDadosBean();
return "BuscaBairro.xhtml";
}
public String excluir() {
jpa.excluir(bairro);
//limpaDadosBean();
//listarEntidades();
return "BuscaBairro.xhtml";
}
public String listarEntidades() {
listaBairro = jpa.buscarPorCampos(bairro);
return "BuscaBairro.xhtml";
}
public List<Bairro> getListaBairrosSelecao() {
listaBairro = new ArrayList<Bairro>();
listaBairro.add(new Bairro(-1, "SELECIONE"));
if (bairro.getMunicipio() != null
&& bairro.getMunicipio().getId() != null) {
List<Bairro> buscarPorCampos = jpa.buscarPorCampos(bairro);
if (buscarPorCampos != null && buscarPorCampos.size() > 0) {
listaBairro.addAll(buscarPorCampos);
}
}
return listaBairro;
}
public List<Bairro> getListaBairro() {
return listaBairro;
}
public Bairro getBairro() {
return bairro;
}
public void setBairro(Bairro Bairro) {
this.bairro = Bairro;
}
}
e ControleCliente
package main.java.helloworld;
import g4flex.entidades.Bairro;
import g4flex.entidades.Cep;
import g4flex.entidades.Cliente;
import g4flex.entidades.Empresa;
import g4flexattendant.servico.contrato.RepositorioJPA;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class ControleCliente extends Controle{
RepositorioJPA<Cliente> jpa = new RepositorioJPA<Cliente>();
Cliente cliente = new Cliente();
public List<Cliente> listaCliente = new ArrayList<Cliente>();
/**
* Método chamado para limpar os dados contidos no Bean antes de cadastrar
* um novo objeto
* */
public String preparaCadastrar() {
limpaDadosBean();
cliente.setData_cadastro(new Date());
return "/cliente/CadastroCliente.jsf";
}
/**
* Método chamado para limpar os dados contidos no Bean antes de chamar a
* página de busca pelo menu
* */
public String preparaBusca() {
limpaDadosBean();
listaCliente = new ArrayList<Cliente>();
return "/cliente/BuscaCliente.jsf";
}
public String preparaAlterar() {
cliente.setAlterar(true);
cliente.setData_alteracao(new Date());
// TODO: Recuperar pedido se necessário
return "/cliente/CadastroCliente.jsf";
}
public void limpaDadosBean() {
cliente = new Cliente();
cliente.setAlterar(false);
cliente.setBairro(new Bairro());
cliente.setCep(new Cep());
cliente.setCliente_indicador(new Cliente());
cliente.setEmpresa_cadastro(new Empresa());
}
public String salvar() {
// Se o cliente estiver sendo cadastrado agora nao tera data de cadastro
if (cliente.getData_cadastro() == null) {
cliente.setData_cadastro(new Date());
// cliente.setAtivo(true);
}
// Busca no banco pelo código interno do cliente
if (cliente.getCliente_indicador().getCodigo_interno() != null
|| !cliente.getCliente_indicador().getCodigo_interno().trim()
.equals("")) {
List<Cliente> listaClienteInd = jpa.buscarPorExemplo(cliente
.getCliente_indicador());
if (listaClienteInd != null && listaClienteInd.size() > 0) {
cliente.setCliente_indicador(listaClienteInd.get(0));
} else {
// TODO: tratar cliente não encontrado
}
}
// Se cliente for desativado e não tiver data de desativação, será
// setada como a atual
if (cliente.isDesativado() && cliente.getData_desativacao() == null) {
cliente.setData_desativacao(new Date());
}
// Se o cliente estiver ativo e tiver data de desativação, a mesma será
// setada como nula
if (!cliente.isDesativado() && cliente.getData_desativacao() != null) {
cliente.setData_desativacao(null);
}
jpa.salvar(cliente);
listaCliente = jpa.buscarPorExemplo(cliente);
limpaDadosBean();
return "BuscaCliente.xhtml";
}
public String excluir() {
jpa.excluir(cliente);
//limpaDadosBean();
//listarClientes();
return "BuscaCliente.xhtml";
}
/**
* Método para retornar a máscara de CPF ou CNPJ de acordo com o tipo do
* cliente (se não houver tipo de cliente ainda, retorna a máscara de CPF)
*
* @author Mateus Carmo
* */
public String getMascaraCpfCnpj() {
if (cliente.getTipo_cliente() != null) {
return cliente.getTipo_cliente().equals('F') ? "999.999.999-99"
: "99.999.999/9999-99";
} else {
return "999.999.999-99";
}
}
public String listarEntidades() {
listaCliente = jpa.buscarPorCampos(cliente);
return "BuscaCliente.xhtml";
}
public List<Cliente> getListaCliente() {
return listaCliente;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente Cliente) {
this.cliente = Cliente;
}
}