Boa Tarde Pessoal, estou tentando fazer um formulário autopreencher quando for digitado o cep no mesmo:
Ex: Digito 21840-040
Preenche:
Logradouro: Rua Evaristo Pires
Bairro: Bangu
Cidade: Rio de Janeiro
Estado: RJ
Esse é meu jsf (só a parte problemática):
<rich:tablabel="Dados do endereço:"><h:panelGridcolumns="3"style="font-size: 9pt;"><h:outputLabelvalue="CEP:"for="cep"/><h:inputTextid="inputCep"size="6"maxlength="9"binding="#{cadastroUsuario.inputCep}"valueChangeListener="#{cadastroUsuario.autoPreencherCep}"value="#{cadastroUsuario.usuario.cep}"onchange="this.form.submit()"onkeyup="FormataCep(this,event)"/></h:panelGrid><h:messagefor="inputCep"styleClass="msgErro"/><br/><rich:separatorheight="1"/><br/><h:panelGridcolumns="4"style="font-size: 9pt;"><h:outputLabelvalue="Logradouro:"for="logradouro"/><h:inputTextid="inputLogradouro"binding="#{cadastroUsuario.inputLogradouro}"value="#{cadastroUsuario.usuario.logradouro}"></h:inputText><h:outputLabelvalue="Numero:"for="numero"/><rich:inputNumberSpinnerid="numero"minValue="1"maxValue="50000"value="#{cadastroUsuario.usuario.numero}"/><h:outputLabelvalue="Bairro:"for="bairro"/><h:inputTextid="inputBairro"binding="#{cadastroUsuario.inputBairro}"value="#{cadastroUsuario.usuario.bairro}"/><h:outputLabelvalue="Cidade:"for="cidade"/><h:inputTextid="inputCidade"binding="#{cadastroUsuario.inputCidade}"value="#{cadastroUsuario.usuario.cidade}"/><h:outputLabelvalue="Estado:"for="estado"/><h:inputTextid="inputUf"maxlength="2"binding="#{cadastroUsuario.inputUf}"value="#{cadastroUsuario.usuario.estado}"/></h:panelGrid></rich:tab>
Meu mananger:
packagebr.com.projeto.control;importbr.com.projeto.model.Usuario;importbr.com.projeto.persistence.UsuarioDao;importbr.com.projeto.webServiceCep.WebServiceCep;importjavax.faces.application.FacesMessage;importjavax.faces.component.html.HtmlInputText;importjavax.faces.context.FacesContext;importjavax.faces.event.ValueChangeEvent;publicclassManterCadastroUsuario{privateUsuariousuario;privateStringimagem;privateStringsenha2;privateHtmlInputTextinputCep,inputLogradouro,inputBairro,inputCidade,inputUf;publicManterCadastroUsuario(){usuario=newUsuario();}publicvoidautoPreencherCep(ValueChangeEventvce)throwsException{Stringcep=vce.getNewValue().toString();StringBuilderlogradouro=newStringBuilder();StringBuilderbairro=newStringBuilder();StringBuildercidade=newStringBuilder();StringBuilderuf=newStringBuilder();consultarCep(cep,logradouro,bairro,cidade,uf);inputLogradouro.setValue(logradouro.toString());inputBairro.setValue(bairro.toString());inputCidade.setValue(cidade.toString());inputUf.setValue(uf.toString());}privatevoidconsultarCep(Stringcep,StringBuilderlogradouro,StringBuilderbairro,StringBuildercidade,StringBuilderuf)throwsException{StringmensagemCep=null;if(usuario.getCep().length()<9){mensagemCep="Informe o CEP completo.";}else{WebServiceCepwebServiceCep=WebServiceCep.searchCep(usuario.getCep());if(webServiceCep.wasSuccessful()){logradouro.append(webServiceCep.getLogradouroFull());bairro.append(webServiceCep.getBairro());cidade.append(webServiceCep.getCidade());uf.append(webServiceCep.getUf());}else{mensagemCep="O CEP digitado não foi encontrado.";}}FacesContext.getCurrentInstance().addMessage("cep",newFacesMessage(mensagemCep));}
Eu tenho um webservice que busca o logradouro, bairro, cidade, uf, ele está rodando já testei o problema é que não to conseguindo trazer isso para o formulário, não ta auto preenchendo…
alves.Felipe
arruma o metodo do valueChangeListener para vc usar o a4j:support igual que o amigo baixo falou…
mas tem que renderizar os ids que vc quer…
lembrando que vc tem que colocar id nos compontes ou ainda vc pode utilizar um a4j:outputPanel para ajudar;
tenta ai qualquer coisa pergunta ai
R
rjbcordeiro
me esqueci, tira o onchange e o onkeyup
B
blaithe
To ligado em tirar o onchange, mas o onkeyup formata o cep 00000-000 tá em java script lá para cima, rs vou tentar as opções que me passaram daki a pouco dou a resposta, Obrigado Galera!
Fiz as alterações, quando preencho o cep e clico no proximo campo ou fora ele até faz o reRender, mas não traz os valores Rua Evaristo Pires... ele não tá encaixando as informações nos campos... :?
O controle:
packagebr.com.projeto.control;importbr.com.projeto.model.Usuario;importbr.com.projeto.persistence.UsuarioDao;importbr.com.projeto.webServiceCep.WebServiceCep;importjavax.faces.application.FacesMessage;importjavax.faces.component.html.HtmlInputText;importjavax.faces.context.FacesContext;publicclassManterCadastroUsuario{privateUsuariousuario;privateStringimagem;privateStringsenha2;privateHtmlInputTextinputCep,inputLogradouro,inputBairro,inputCidade,inputUf;publicManterCadastroUsuario(){usuario=newUsuario();}publicvoidautoPreencherCep()throwsException{StringBuilderlogradouro=newStringBuilder();StringBuilderbairro=newStringBuilder();StringBuildercidade=newStringBuilder();StringBuilderuf=newStringBuilder();consultarCep(logradouro,bairro,cidade,uf);inputLogradouro.setValue(logradouro.toString());inputBairro.setValue(bairro.toString());inputCidade.setValue(cidade.toString());inputUf.setValue(uf.toString());FacesContext.getCurrentInstance().renderResponse();}privatevoidconsultarCep(StringBuilderlogradouro,StringBuilderbairro,StringBuildercidade,StringBuilderuf)throwsException{StringmensagemCep=null;if(usuario.getCep().length()<9){mensagemCep="Informe o CEP completo.";}else{WebServiceCepwebServiceCep=WebServiceCep.searchCep(usuario.getCep());if(webServiceCep.wasSuccessful()){logradouro.append(webServiceCep.getLogradouroFull());bairro.append(webServiceCep.getBairro());cidade.append(webServiceCep.getCidade());uf.append(webServiceCep.getUf());}else{mensagemCep="O CEP digitado não foi encontrado.";}}FacesContext.getCurrentInstance().addMessage("inputcep",newFacesMessage(mensagemCep));}
A jsf:
<f:view><rich:panel><f:facetname="header"><h:outputTextvalue="Cadastro de usuário"/></f:facet><h:outputTextvalue="Formulário para cadastro de usuário"/><a4j:formid="formcadastrousuario"><rich:tabPanelswitchType="client"width="600"><rich:tablabel="Dados do usuário:"><h:panelGridcolumns="2"style="font-size: 9pt;"><h:outputLabelvalue="Nome:"for="nome"/><h:inputTextid="nome"value="#{cadastroUsuario.usuario.nome}"/><h:outputLabelvalue="CPF:"for="cpf"/><h:inputTextid="cpf"maxlength="14"value="#{cadastroUsuario.usuario.cpf}"onkeyup="FormataCpf(this,event)"/><h:outputLabelvalue="Data de Nascimento:"for="datanascimento"/><rich:calendarid="datanascimento"datePattern="dd/MM/yyyy"value="#{cadastroUsuario.usuario.datanascimento}"/></h:panelGrid><br/><rich:separatorheight="1"/><br/><h:panelGridcolumns="1"style="font-size: 9pt;"><h:graphicImageurl="kaptcha.jpg"width="200"/><br/><h:outputLabelvalue="Digite a imagem acima:"for="imagem"/><h:inputTextid="imagem"value="#{cadastroUsuario.imagem}"size="16"/></h:panelGrid></rich:tab><rich:tablabel="Dados do endereço:"><h:panelGridcolumns="3"style="font-size: 9pt;"><h:outputLabelvalue="CEP:"for="cep"/><h:inputTextid="inputCep"size="6"maxlength="9"value="#{cadastroUsuario.usuario.cep}"onkeyup="FormataCep(this,event)"><a4j:supportevent="onchange"action="#{cadastroUsuario.autoPreencherCep}"reRender="inputLogradouro, inputBairro, inputCidade, inputUf"/></h:inputText></h:panelGrid><h:messagefor="inputCep"styleClass="msgErro"/><br/><rich:separatorheight="1"/><br/><h:panelGridcolumns="4"style="font-size: 9pt;"><h:outputLabelvalue="Logradouro:"for="logradouro"/><h:inputTextid="inputLogradouro"binding="#{cadastroUsuario.inputLogradouro}"value="#{cadastroUsuario.usuario.logradouro}"immediate="true"></h:inputText><h:outputLabelvalue="Numero:"for="numero"/><rich:inputNumberSpinnerid="numero"minValue="1"maxValue="50000"value="#{cadastroUsuario.usuario.numero}"/><h:outputLabelvalue="Bairro:"for="bairro"/><h:inputTextid="inputBairro"binding="#{cadastroUsuario.inputBairro}"value="#{cadastroUsuario.usuario.bairro}"/><h:outputLabelvalue="Cidade:"for="cidade"/><h:inputTextid="inputCidade"binding="#{cadastroUsuario.inputCidade}"value="#{cadastroUsuario.usuario.cidade}"/><h:outputLabelvalue="Estado:"for="estado"/><h:inputTextid="inputUf"maxlength="2"binding="#{cadastroUsuario.inputUf}"value="#{cadastroUsuario.usuario.estado}"/></h:panelGrid></rich:tab><rich:tablabel="Dados da conta:"><h:panelGridcolumns="2"style="font-size: 9pt;"><h:outputLabelvalue="Email:"for="email"/><h:inputTextid="email"value="#{cadastroUsuario.usuario.email}"/><h:outputLabelvalue="Senha:"for="senha"/><h:inputSecretid="senha"value="#{cadastroUsuario.usuario.senha}"/><h:outputLabelvalue="Confirme a senha:"for="senha2"/><h:inputSecretid="senha2"value="#{cadastroUsuario.senha2}"/></h:panelGrid></rich:tab></rich:tabPanel><br/><a4j:commandButtonvalue="Cadastrar Usuário"action="#{cadastroUsuario.cadastrar}"reRender="formcadastrousuario"/><a4j:commandButtonvalue="Cancelar"id="cancelar"><rich:componentControlattachTo="cancelar"for="formcadastrousuario"event="onclick"operation="hide"/></a4j:commandButton><br/><br/><h:messagesstyleClass="msgErro"/></a4j:form></rich:panel></f:view>
A
alanweb
Cara vc me entendeu errado era uma solução ou outra! Mas vc mudou seu form e seu backbean, logo se vc resolver voltar o q era antes talvez funcione :wink:
Eu te entendi sim amigo, até fiz o que vc me aconselhou mas não trouxe as informações… mas piscou a tela… renderizou…
B
blaithe
Se eu der um print ou trazer dentro de uma msg eu consigo trazer o resultado Rua… Bairro… cidade… Estado… mas não to conseguindo fazer esse troço entrar nos campos, o erro ou tá no backbean na parte que eu resgato os valores, ou está no formulário em trazer os valores nos campos…
A
alanweb
Esse seu backBean que vc postou ta completo, ou vc so colocou a parte importante, tipo existe nele os getters e setters dos inputs né???
B
blaithe
tem sim vou postar ele completo...
packagebr.com.projeto.control;importbr.com.projeto.model.Usuario;importbr.com.projeto.persistence.UsuarioDao;importbr.com.projeto.webServiceCep.WebServiceCep;importjavax.faces.application.FacesMessage;importjavax.faces.component.html.HtmlInputText;importjavax.faces.context.FacesContext;publicclassManterCadastroUsuario{privateUsuariousuario;privateStringimagem;privateStringsenha2;privateHtmlInputTextinputCep,inputLogradouro,inputBairro,inputCidade,inputUf;publicManterCadastroUsuario(){usuario=newUsuario();}publicvoidautoPreencherCep()throwsException{StringBuilderlogradouro=newStringBuilder();StringBuilderbairro=newStringBuilder();StringBuildercidade=newStringBuilder();StringBuilderuf=newStringBuilder();consultarCep(logradouro,bairro,cidade,uf);inputLogradouro.setValue(logradouro.toString());inputBairro.setValue(bairro.toString());inputCidade.setValue(cidade.toString());inputUf.setValue(uf.toString());FacesContext.getCurrentInstance().renderResponse();}privatevoidconsultarCep(StringBuilderlogradouro,StringBuilderbairro,StringBuildercidade,StringBuilderuf)throwsException{StringmensagemCep=null;if(usuario.getCep().length()<9){mensagemCep="Informe o CEP completo.";}else{WebServiceCepwebServiceCep=WebServiceCep.searchCep(usuario.getCep());if(webServiceCep.wasSuccessful()){logradouro.append(webServiceCep.getLogradouroFull());bairro.append(webServiceCep.getBairro());cidade.append(webServiceCep.getCidade());uf.append(webServiceCep.getUf());}else{mensagemCep="O CEP digitado não foi encontrado.";}}FacesContext.getCurrentInstance().addMessage("inputcep",newFacesMessage(mensagemCep));}publicvoidcadastrar(){Stringmensagem=null;try{Stringcaptcha=(String)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);booleandadosValidos=true;if(usuario.getNome().length()<3){mensagem="Digite um nome valido!";dadosValidos=false;}elseif(usuario.getCpf().length()<14){mensagem="Digite um CPF valido!";dadosValidos=false;}elseif(usuario.getDatanascimento()==null){mensagem="Informe a data de nascimento!";dadosValidos=false;}elseif(usuario.getCep().length()<9){mensagem="Informe o seu CEP!";dadosValidos=false;}elseif(usuario.getLogradouro().length()<10){mensagem="Digite um endereço valido!";dadosValidos=false;}elseif(usuario.getBairro().length()<3){mensagem="Digite um bairro valido!";dadosValidos=false;}elseif(usuario.getEstado()==null){mensagem="Digite um estado valido!";dadosValidos=false;}elseif(usuario.getNumero()==null){mensagem="Informe o numero da residencia!";dadosValidos=false;}elseif(usuario.getCidade().length()<5){mensagem="Digite uma cidade valida!";dadosValidos=false;}elseif(usuario.getEmail().length()<8){mensagem="Digite um email valido!";dadosValidos=false;}elseif(usuario.getSenha()==null){mensagem="Informe uma senha!";dadosValidos=false;}elseif(usuario.getSenha().length()<6){mensagem="Informe uma senha com pelo menos 6 digitos!";dadosValidos=false;}elseif(newUsuarioDao().cpfExistente(usuario.getCpf())){mensagem="Erro. O CPF digitado já está cadastrado.";dadosValidos=false;}if(dadosValidos){if(captcha!=null&&imagem!=null){if(imagem.equals(captcha)){if(usuario.getSenha().equals(senha2)){newUsuarioDao().salvar(usuario);usuario=newUsuario();mensagem="Usuário cadastrado com sucesso!";}else{mensagem="As senhas não coincidem! Digite novamente.";}}else{mensagem="Erro, digite a imagem corretamente!";}}}}catch(Exceptione){mensagem=e.getMessage();}FacesContext.getCurrentInstance().addMessage("formcadastrousuario",newFacesMessage(mensagem));}publicUsuariogetUsuario(){returnusuario;}publicvoidsetUsuario(Usuariousuario){this.usuario=usuario;}publicStringgetImagem(){returnimagem;}publicvoidsetImagem(Stringimagem){this.imagem=imagem;}publicStringgetSenha2(){returnsenha2;}publicvoidsetSenha2(Stringsenha2){this.senha2=senha2;}publicHtmlInputTextgetInputBairro(){returninputBairro;}publicvoidsetInputBairro(HtmlInputTextinputBairro){this.inputBairro=inputBairro;}publicHtmlInputTextgetInputCep(){returninputCep;}publicvoidsetInputCep(HtmlInputTextinputCep){this.inputCep=inputCep;}publicHtmlInputTextgetInputCidade(){returninputCidade;}publicvoidsetInputCidade(HtmlInputTextinputCidade){this.inputCidade=inputCidade;}publicHtmlInputTextgetInputLogradouro(){returninputLogradouro;}publicvoidsetInputLogradouro(HtmlInputTextinputLogradouro){this.inputLogradouro=inputLogradouro;}publicHtmlInputTextgetInputUf(){returninputUf;}publicvoidsetInputUf(HtmlInputTextinputUf){this.inputUf=inputUf;}}