Bom dia galera, to com um problema que ja ta me deixando louco a alguns dias.
é o seguinte: no sistema que estou fazendo, na página de cadastro de uma empresa, existe
a parte do endereço, então eu improvisei uma popup com uma p:datatable dentro de uma p:dialog.
a pesquisa funciona assim: quando a dialog é aberta a datatable está vazia. então o usuário digita o Estado,
a Cidade e o nome da Rua e manda pesquisar e ai a datatable é atualizada com os registros encontrados na pesquisa.
quando o usuário selecionar uma linha da datatable, os campos de CEP, Rua e Bairro que estão na página de cadastro
são atualizados. Até aí tudo bem, sempre funcionou numa boa, mas eu fui fazer uma nova implementação,
possibilitando o usuário a pesquisar digitando o CEP na página de cadastro. essa busca é feita usando a tag f:ajax
no evento “blur” do inputText. a busca pelo CEP via ajax funciona beleza, mas dai a busca pela popup começou a
apresentar um comportamento estranho. quando busco pela popup pela primeira vez e seleciono uma linha, ele atualiza
o nome da rua e o bairro numa boa, mas o CEP não, e se eu pesquisar outro endereço pela popup e selecionar a linha, ai não
atualiza mais nada, ou seja, a busca pela popup só atualiza o nome da rua e do bairro a primeira vez, e o CEP não atualiza nunca.
pensei que poderia ser conflito com a busca ajax, então retirei a busca ajax, mas o problema continuou.
quero saber se alguém pode me ajudar.
abaixo seguem algumas informações a mais e também o código da página e dos beans envolvidos.
1 - a página é de cadastro de uma empresa, que usa basicamente o bean “empresaBean”, porém a busca da popup é feita em
“logradouroBean”.
2 - Já a busca pelo CEP via AJAX é feita em empresaBean mesmo.
Còdigo da página(só com os campos do endereço e com a popup):
<h:outputText value="CEP:"/>
<p:inputText id="logrCEP" value="#{empresaBean.logradouro.logrCep}">
<f:ajax event="blur" execute="@this" listener="#{empresaBean.pesquisarPorCep}" render="logrCEP logrCodigo logrNome logrBairro"/>
</p:inputText>
<p:commandLink onclick="popupLogradouro.show()" title="Abrir Popup de Busca">
<h:graphicImage url="/images/lens_32x32.png" width="24" height="26" style="border: none;"/>
</p:commandLink>
<h:inputHidden id="logrCodigo" value="#{empresaBean.logradouro.LOGRCodigo}" required="true" requiredMessage="O Logradouro é Obrigatório"/>
<h:outputText value="Endereço:"/>
<p:inputText id="logrNome" value="#{empresaBean.empresa.EMPREndereco}" required="true" requiredMessage="O Endereço é Obrigatório"/>
<h:outputText/>
<h:outputText value="Bairro:"/>
<p:inputText id="logrBairro" value="#{empresaBean.empresa.EMPRBairro}" required="true" requiredMessage="O Bairro é Obrigatório"/>
<p:dialog header="Escolha um Logradouro" widgetVar="popupLogradouro" modal="true" draggable="false"
width="680" resizable="false" showEffect="fold" hideEffect="slide" closeOnEscape="true">
<h:panelGrid id="pesquisarCEP" columns="5">
<h:outputText value="Estado"/>
<h:outputText value="Cidade"/>
<h:outputText value="Logradouro"/>
<h:outputText/>
<h:outputText/>
<p:inputText onblur="this.value = this.value.toUpperCase();" maxlength="2" binding="#{logradouroBean.selectEstado}" id="ddlUF" style="width: 50px;"/>
<p:inputText binding="#{logradouroBean.inputCidade}" value="#{logradouroBean.cidade}" />
<p:inputText binding="#{logradouroBean.inputRua}" value="#{logradouroBean.logr}"/>
<p:commandLink action="#{logradouroBean.pesquisar}" ajax="true" update="tabelaLogradouro,msg" immediate="true" onstart="imgAjax.show()" oncomplete="imgAjax.hide()">
<h:graphicImage url="/images/lens_32x32.png" width="24" height="26" style="border: none;"/>
</p:commandLink>
</h:panelGrid>
<p:dataTable id="tabelaLogradouro" var="logrListar" value="#{logradouroBean.listaPopup}"
emptyMessage="Nenhum Registro Encontrado" paginator="true" rows="10"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
paginatorPosition="bottom" selectionMode="single" selection="#{empresaBean.logradouro}"
update="logrCEP,logrCodigo,logrNome,logrBairro" style="font-size: 13px; width:100%;">
<f:facet name="header">
Lista de Logradouros
</f:facet>
<p:column filterBy="#{logrListar.LOGRNome}" filterMatchMode="contains" filterStyle="width: 100%;">
<f:facet name="header">
<h:outputText value="Nome"/>
</f:facet>
<h:outputText value="#{logrListar.LOGRNome}"/>
</p:column>
<p:column filterBy="#{logrListar.logrCep}" filterMatchMode="startsWith" filterStyle="width: 100%;">
<f:facet name="header">
<h:outputText value="CEP"/>
</f:facet>
<h:outputText value="#{logrListar.logrCep}"/>
</p:column>
</p:dataTable>
</p:dialog>
Código de logradouroBean
@ManagedBean(name="logradouroBean")
@SessionScoped
public class LogradouroBean implements Serializable {
private SAG7Logradouro logradouro;
private DataModel<SAG7Logradouro> listaLogradouros;
private DataModel<SAG7Logradouro> listaPopup;
private Integer estado;
private String cidade;
private String logr;
private HtmlInputText selectEstado;
private HtmlInputText inputCidade;
private HtmlInputText inputRua;
private HtmlInputText inputCep;
private HtmlInputText inputLogradouro;
private HtmlInputText inputBairro;
private Map<String, Integer> listaEstados;
public LogradouroBean() {
logradouro = new SAG7Logradouro();
listaLogradouros = new ListDataModel<SAG7Logradouro>();
listaPopup = new ListDataModel<SAG7Logradouro>();
setListaEstados();
}
public Map<String, Integer> getListaEstados() {
return listaEstados;
}
public void setListaEstados() {
this.listaEstados = new HashMap<String, Integer>();
this.listaEstados.put("AC", 12);
this.listaEstados.put("AL", 27);
this.listaEstados.put("AP", 16);
this.listaEstados.put("AM", 13);
this.listaEstados.put("BA", 29);
this.listaEstados.put("CE", 23);
this.listaEstados.put("DF", 53);
this.listaEstados.put("ES", 32);
this.listaEstados.put("GO", 52);
this.listaEstados.put("MA", 21);
this.listaEstados.put("MT", 51);
this.listaEstados.put("MS", 50);
this.listaEstados.put("MG", 31);
this.listaEstados.put("PA", 15);
this.listaEstados.put("PB", 25);
this.listaEstados.put("PR", 41);
this.listaEstados.put("PE", 26);
this.listaEstados.put("PI", 22);
this.listaEstados.put("RJ", 33);
this.listaEstados.put("RN", 24);
this.listaEstados.put("RS", 43);
this.listaEstados.put("RO", 11);
this.listaEstados.put("RR", 14);
this.listaEstados.put("SC", 42);
this.listaEstados.put("SP", 35);
this.listaEstados.put("SE", 28);
this.listaEstados.put("TO", 17);
}
public HtmlInputText getInputBairro() {
return inputBairro;
}
public void setInputBairro(HtmlInputText inputBairro) {
this.inputBairro = inputBairro;
}
public HtmlInputText getInputLogradouro() {
return inputLogradouro;
}
public void setInputLogradouro(HtmlInputText inputLogradouro) {
this.inputLogradouro = inputLogradouro;
}
public HtmlInputText getInputCidade() {
return inputCidade;
}
public void setInputCidade(HtmlInputText inputCidade) {
this.inputCidade = inputCidade;
}
public HtmlInputText getInputCep() {
return inputCep;
}
public void setInputCep(HtmlInputText inputCep) {
this.inputCep = inputCep;
}
public HtmlInputText getInputRua() {
return inputRua;
}
public void setInputRua(HtmlInputText inputRua) {
this.inputRua = inputRua;
}
public HtmlInputText getSelectEstado() {
return selectEstado;
}
public void setSelectEstado(HtmlInputText selectEstado) {
this.selectEstado = selectEstado;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public Integer getEstado() {
return estado;
}
public void setEstado(Integer estado) {
this.estado = estado;
}
public String getLogr() {
return logr;
}
public void setLogr(String logr) {
this.logr = logr;
}
public DataModel<SAG7Logradouro> getListaLogradouros() {
return listaLogradouros;
}
public void setListaLogradouros(DataModel<SAG7Logradouro> listaLogradouros) {
this.listaLogradouros = listaLogradouros;
}
public DataModel<SAG7Logradouro> getListaPopup() {
return listaPopup;
}
public void setListaPopup(DataModel<SAG7Logradouro> listaPopup) {
this.listaPopup = listaPopup;
}
public SAG7Logradouro getLogradouro() {
return logradouro;
}
public void setLogradouro(SAG7Logradouro logradouro) {
this.logradouro = logradouro;
}
public void pesquisar(){
if(selectEstado.getSubmittedValue().toString() != null && selectEstado.getSubmittedValue().toString() != ""){
LogradouroDAO ldao = new LogradouroDAO();
estado = listaEstados.get(selectEstado.getSubmittedValue().toString());
cidade = inputCidade.getSubmittedValue().toString();
logr = inputRua.getSubmittedValue().toString();
listaPopup = new ListDataModel<SAG7Logradouro>(ldao.pesquisar(estado, cidade, logr));
}
}
}
Código de empresaBean:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package controle.beans;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import modelo.entidades.SAG7Logradouro;
import modelo.entidades.SAG7Usuarios;
import modelo.entidades.SGCGCalendarioContabil;
import modelo.entidades.SGCGEmpresa;
import modelo.entidades.SGCGGestorContabil;
import modelo.entidades.SGCGJuntaComercial;
import modelo.entidades.SGCGPlanoDeContas;
import modelo.persistencia.EmpresaDAO;
import modelo.persistencia.LogradouroDAO;
import org.primefaces.component.datatable.DataTable;
/**
*
* @author Administrador
*/
@ManagedBean(name="empresaBean")
@SessionScoped
public class EmpresaBean implements Serializable {
private SGCGEmpresa empresa;
private SGCGPlanoDeContas plano;
private SGCGCalendarioContabil calendario;
private SGCGJuntaComercial juntaComercial;
private SGCGGestorContabil gestorContabil;
private SAG7Logradouro logradouro;
private DataModel<SGCGEmpresa> listaEmpresas;
private DataModel<SGCGEmpresa> listaEmpresasPopup;
private SelectItem[] situacoes;
public EmpresaBean() {
empresa = new SGCGEmpresa();
plano = new SGCGPlanoDeContas();
calendario = new SGCGCalendarioContabil();
juntaComercial = new SGCGJuntaComercial();
gestorContabil = new SGCGGestorContabil();
logradouro = new SAG7Logradouro();
//listaEmpresas = new ListDataModel<SGCGEmpresa>();
//listaEmpresasPopup = new ListDataModel<SGCGEmpresa>();
setSituacoes();
}
public SGCGCalendarioContabil getCalendario() {
return calendario;
}
public void setCalendario(SGCGCalendarioContabil calendario) {
String botao = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("btnSalvar");
if(botao == null){
novoCalendario();
this.calendario = calendario;
}
}
public void novoCalendario(){
this.calendario = new SGCGCalendarioContabil();
}
public SGCGGestorContabil getGestorContabil() {
return gestorContabil;
}
public void setGestorContabil(SGCGGestorContabil gestorContabil) {
String botao = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("btnSalvar");
if(botao == null){
novoGestorContabil();
this.gestorContabil = gestorContabil;
}
}
public void novoGestorContabil(){
this.gestorContabil = new SGCGGestorContabil();
}
public SGCGJuntaComercial getJuntaComercial() {
return juntaComercial;
}
public void setJuntaComercial(SGCGJuntaComercial juntaComercial) {
String botao = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("btnSalvar");
if(botao == null){
novaJuntaComercial();
this.juntaComercial = juntaComercial;
}
}
public void novaJuntaComercial(){
this.juntaComercial = new SGCGJuntaComercial();
}
public SAG7Logradouro getLogradouro() {
return logradouro;
}
public void setLogradouro(SAG7Logradouro logradouro) {
String botao = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("btnSalvar");
if(botao == null){
novoLogradouro();
this.logradouro = logradouro;
if(this.logradouro != null){
this.empresa.setEMPREndereco(this.logradouro.getLOGRNome());
this.empresa.setEMPRBairro(this.logradouro.getSAG7Bairro().getBAIRNome());
}
}
}
public void novoLogradouro(){
this.logradouro = new SAG7Logradouro();
}
public SGCGPlanoDeContas getPlano() {
return plano;
}
public void setPlano(SGCGPlanoDeContas plano) {
String botao = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("btnSalvar");
if(botao == null){
novoPlano();
this.plano = plano;
}
}
public void novoPlano(){
this.plano = new SGCGPlanoDeContas();
}
public SGCGEmpresa getEmpresa() {
return empresa;
}
public void setEmpresa(SGCGEmpresa empresa) {
this.empresa = empresa;
}
public DataModel<SGCGEmpresa> getListaEmpresas() {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("empresa");
setEmpresa(null);
if(listaEmpresas == null){
EmpresaDAO empresaDAO = new EmpresaDAO();
listaEmpresas = new ListDataModel<SGCGEmpresa>(empresaDAO.listarPagina());
}
return listaEmpresas;
}
public void setListaEmpresas(DataModel<SGCGEmpresa> listaEmpresas) {
this.listaEmpresas = listaEmpresas;
}
public DataModel<SGCGEmpresa> getListaEmpresasPopup() {
if(listaEmpresasPopup == null){
EmpresaDAO empresaDAO = new EmpresaDAO();
listaEmpresasPopup = new ListDataModel<SGCGEmpresa>(empresaDAO.listarPopup());
}
return listaEmpresasPopup;
}
public void setListaEmpresasPopup(DataModel<SGCGEmpresa> listaEmpresasPopup) {
this.listaEmpresasPopup = listaEmpresasPopup;
}
public SelectItem[] getSituacoes() {
return situacoes;
}
public void setSituacoes() {
situacoes = new SelectItem[3];
situacoes[0] = new SelectItem("", "Todas");
situacoes[1] = new SelectItem("Ativa", "Ativa");
situacoes[2] = new SelectItem("Inativa", "Inativa");
}
public String listar(){
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("empresa");
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("matriz");
setEmpresa(null);
listaEmpresas = null;
listaEmpresasPopup = null;
return "empresaLista";
}
public String listarFiliais(){
try {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("matriz");
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("matriz", getEmpresa());
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("listar", "sim");
return "empresaFilialLista";
} catch (Exception e) {
e.printStackTrace();
return "empresaLista";
}
}
public String listarUsuarios(){
try {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("empresa");
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("empresa", getEmpresa());
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("listar", "sim");
return "usuarioEmpresaLista";
} catch (Exception e) {
e.printStackTrace();
return "empresaLista";
}
}
public String criar(){
empresa = new SGCGEmpresa();
plano = new SGCGPlanoDeContas();
calendario = new SGCGCalendarioContabil();
juntaComercial = new SGCGJuntaComercial();
gestorContabil = new SGCGGestorContabil();
logradouro = new SAG7Logradouro();
return "empresaCadastro";
}
public String cadastrar(){
FacesContext context = FacesContext.getCurrentInstance();
try {
SAG7Usuarios logado = (SAG7Usuarios) context.getExternalContext().getSessionMap().get("usuario");
empresa.setSAG7Usuarios1(logado);//Usuário de Cadastro
empresa.setSAG7Usuarios(logado);//Usuário de Alteração
empresa.setEMPRDataHoraCadastro(new Date(Calendar.getInstance().getTime().getTime()));
empresa.setEMPRDataUltimaAlteracao(new Date(Calendar.getInstance().getTime().getTime()));
empresa.setEMPRSituacao("Ativa");
empresa.setSGCGPlanoDeContas(plano);
empresa.setSGCGCalendarioContabil(calendario);
empresa.setSGCGJuntaComercial(juntaComercial);
empresa.setSGCGGestorContabil(gestorContabil);
empresa.setSAG7Logradouro(logradouro);
EmpresaDAO edao = new EmpresaDAO();
if(edao.cadastrar(empresa)==1){
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Empresa Cadastrada com Sucesso", null));
listaEmpresas = null;
listaEmpresasPopup = null;
return "empresaLista";
}else{
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi Possível Cadastrar a Empresa", null));
return "empresaCadastro";
}
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi Possível Cadastrar a Empresa", null));
return "empresaCadastro";
}
}
public String editar(){
FacesContext context = FacesContext.getCurrentInstance();
try {
EmpresaDAO edao = new EmpresaDAO();
empresa = edao.localizar(empresa.getEMPRCodigo());
plano = empresa.getSGCGPlanoDeContas();
calendario = empresa.getSGCGCalendarioContabil();
juntaComercial = empresa.getSGCGJuntaComercial();
gestorContabil = empresa.getSGCGGestorContabil();
logradouro = empresa.getSAG7Logradouro();
return "empresaEdicao";
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi Possível Carregar as Informações da Empresa", null));
return "empresaLista";
}
}
public String excluir(){
FacesContext context = FacesContext.getCurrentInstance();
try {
EmpresaDAO edao = new EmpresaDAO();
empresa = edao.localizar(empresa.getEMPRCodigo());
if(edao.excluir(empresa)==1){
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Empresa Excluida com Sucesso", null));
listaEmpresas = null;
listaEmpresasPopup = null;
return "empresaLista";
}else{
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi Possível Excluir a Empresa", null));
return "empresaLista";
}
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi Possível Excluir a Empresa", null));
return "empresaLista";
}
}
public String atualizar(){
FacesContext context = FacesContext.getCurrentInstance();
try {
SAG7Usuarios logado = (SAG7Usuarios) context.getExternalContext().getSessionMap().get("usuario");
empresa.setSAG7Usuarios(logado);//Usuário de Alteração
empresa.setEMPRDataUltimaAlteracao(new Date(Calendar.getInstance().getTime().getTime()));
empresa.setSGCGPlanoDeContas(plano);
empresa.setSGCGCalendarioContabil(calendario);
empresa.setSGCGJuntaComercial(juntaComercial);
empresa.setSGCGGestorContabil(gestorContabil);
empresa.setSAG7Logradouro(logradouro);
EmpresaDAO edao = new EmpresaDAO();
if(edao.atualizar(empresa)==1){
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Empresa Atualizada com Sucesso", null));
listaEmpresas = null;
listaEmpresasPopup = null;
return "empresaLista";
}else{
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi Possível Atualizar a Empresa", null));
return "empresaEdicao";
}
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi Possível Atualizar a Empresa", null));
return "empresaEdicao";
}
}
public void pesquisarPorCep(AjaxBehaviorEvent e){
if(logradouro.getLogrCep() != null || !logradouro.getLogrCep().equals("")){
LogradouroDAO ldao = new LogradouroDAO();
SAG7Logradouro logradouro2 = ldao.buscarPorCep(logradouro.getLogrCep());
if(logradouro2 == null){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Endereço não encontrado", null));
}else{
setLogradouro(logradouro2);
}
}
}
public void atualizarCEP(){
System.out.println("Passei Aqui");
}
}
Agradeço a ajuda de todos.
