Dados do cliente sendo perdidos ao salvar um bairro por uma dialog do cadastro do cliente

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;
	}
}

Qual o escopo do managedbean?

tanto o ControleCliente como o ControleBairro sao SessionScoped

Talvez por isso

limpaDadosBean();

Esse metodo limpa apenas os dados do bairro, no controleBairro, perai q vo adicionar ambas ControleCliente e ControleBairro tambem la pra ajudar

Pronto, postei ambas as classes ^^

Bem, so para avisar caso alguem venha a ter um problema parecido, consegui resolver colocando <p:ajax> nos campos para salvar os dados, por exemplo:

<p:inputText
    id="nome"
    required="true"
    requiredMessage="Campo Obrigatório: Nome"
    value="#{controleCliente.cliente.nome}">
	<p:ajax />
</p:inputText>