[RESOLVIDO] Buscar dados após digitar CPF

16 respostas
J

Olá

Eu tenho uma aplicação web em JSF e tenho uma página onde preciso digtar um CPF, buscar as informações no BD (caso existam) e carregá-las nos campos correspondentes na mesma página.

Alguém tem alguma idéia de como posso fazer isso? :roll:

16 Respostas

X

DWR

D

JSF2 possui suporte nativo à ajax.
A documentação é bem tranquila e existem vários exemplos na internet.

J

Alguém sabe onde tem algum exemplo?

Obrigada

E

Utiliza JSF “puro” ou com framework adicional ? (Primefaces, RichFaces, … )

A

Segue um exemplo, utilizando [url]http://primefaces.org/[/url] ,neste exemplo o cara digitava o cep, ele consultava no banco e carregava o endereço

<h:panelGrid columns="2">
                <p:inputMask id="cep" value="#{pessoaBean.endereco.cep}" required="true" requiredMessage="Cep é um campo obrigatório" maxlength="8" mask="99999999" >
                    <p:ajax event="blur" listener="#{pessoaBean.buscaEndereço()}" update="formCadastroJuridica:estado,formCadastroJuridica:cidade,formCadastroJuridica:bairro,formCadastroJuridica:endereco"/>
                </p:inputMask>

                <p:ajaxStatus>
                    <f:facet name="start">
                        <h:graphicImage value="/imagens/icones/ajaxloading.gif"/>
                    </f:facet>

                    <f:facet name="complete">
                        <h:outputText value="" />
                    </f:facet>
                </p:ajaxStatus>
            </h:panelGrid>
            <p:message for="cep"/>

            UF: *
            <h:selectOneMenu  id="estado" value="#{pessoaBean.endereco.uf}" required="true" requiredMessage="Selecione um estado." converterMessage="Estado é obrigatório." >
                <f:selectItem itemLabel="Selecione..." itemValue="" /> 
                <f:selectItems value="#{ufBean.ufItens}" />
                <p:ajax event="change" process="estado" listener="#{pessoaBean.carregaCidadesEstado()}" update="formCadastroJuridica:estado,formCadastroJuridica:bairro,formCadastroJuridica:endereco" />
            </h:selectOneMenu>
            <p:message for="estado"/>
            Cidade: *
            <h:selectOneMenu id="cidade" value="#{pessoaBean.endereco.cidade}" required="true" requiredMessage="Selecione uma cidade." converterMessage="Cidade é obrigatório.">
                <f:selectItem itemValue="a" itemLabel="Selecione..." />
                <f:selectItems value="#{pessoaBean.cidadesByUf}" />
            </h:selectOneMenu>
            <p:message for="cidade"/>


            Bairro: *
            <p:inputText id="bairro" value="#{pessoaBean.endereco.bairro}" required="true" requiredMessage="Bairro é um campo obrigatório"
                         maxlength="15"/>
            <p:message for="bairro"/>


            Endereço: *
            <p:inputText id="endereco" value="#{pessoaBean.endereco.logradouro}"
                         maxlength="60" size="60" required="true" requiredMessage="Endereço é um campo obrigatório"/>
            <p:message for="endereco"/>
Na linha 3:
<p:ajax event="blur" listener="#{pessoaBean.buscaEndereço()}"
Ele executa o metodo buscaEndereço após o campo perder o focus

Funciona mais ou menos assim :)
:-o

J

Tentei fazer meu código seguindo o exemplo do ale0790, mas verifiquei que o número do CPF não é passado para o Bean e dessa forma a consulta retorna sem dados para carregar na página.
Meu código ficou assim:

xhtml

<h:form id="cadastrousuario">
			<p:messages showDetail="true" autoUpdate="true" showSummary="false" />
			<h:inputHidden value="#{usuarioBean.usuario.id}" />

			<div class="campo-grupo">
				<h:outputLabel value="CPF" />
				<p:inputText id="cpf"
					value="#{usuarioBean.documento.numero}"
					required="true" requiredMessage="CPF é um campo obrigatório"
					immediate="true" maxlength="11" 
					converter="documentoConversor" size="10">
					<p:ajax event="blur" listener="#{usuarioBean.buscaPorCPF()}"
						update="cadastrousuario:nome" />
				</p:inputText>
			</div>

			<div class="campo-grupo">
				<h:outputLabel value="Nome" />
				<p:inputText id="nome" value="#{usuarioBean.usuario.pessoa.nome}"
					required="true" requiredMessage="Nome é um campo obrigatório"
					maxlength="60" onkeyup="up(this)" size="70"/>
					<p:message for="nome" />
			</div>

			<div style="clear: both;"></div>

			<div class="campo-simples">
				<h:outputLabel value="Email" />
				<p:inputText size="100" name="email"
					value="#{usuarioBean.usuario.pessoa.email}" maxlength="60" />
			</div>

meu ManagedBean

@javax.faces.bean.ManagedBean(name = "usuarioBean")
@RequestScoped
public class UsuarioBean {
	private Usuario usuario = new Usuario();
	private List<Usuario> lista = null;
	private Documento documento = new Documento();

	public String salvar() {
		UsuarioRN usuarioRN = new UsuarioRN();
		this.usuario.getPessoa().setDocumento(this.documento);
		usuarioRN.salvar(this.usuario);
		return "principal";
	}

	public Map<Long, String> ListarUsuarios() {
		UsuarioRN usuarioRN = new UsuarioRN();
		Map<Long, String> auxiliar = new HashMap<Long, String>();
		for (Usuario usuario : usuarioRN.listar()) {
			auxiliar.put(usuario.getId(), usuario.getNome());
		}
		return auxiliar;
	}

	public void buscaPorCPF() {
		UsuarioRN usuarioRN = new UsuarioRN();
		this.usuario.setPessoa(usuarioRN.buscarPessoaPorCPF(this.documento));
	}

	// GETTERS AND SETTERS
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getLista() {
		UsuarioRN usuarioRN = new UsuarioRN();
		return usuarioRN.listar();
	}

	public void setLista(List<Usuario> lista) {
		this.lista = lista;
	}

	public Documento getDocumento() {
		return documento;
	}

	public void setDocumento(Documento documento) {
		this.documento = documento;
	}

}

Alguém pode me ajudar por favor?

A

sou meio leigo ainda, sera que seu bean nao devia ser ?? @SessionScoped ?? testa ai

J

Já tentei isso :confused:

Tá difícil encontrar uma solução viu…

C
value="#{usuarioBean.usuario.pessoa.nome}"

Dentro de usuário tem um objeto pessoa que tem um atributo nome? ou o nome fica no usuario?

value="#{usuarioBean.usuario.nome}"

Não carrega o objeto ou nao atualiza a tela?

C

Outra dica,

Quanto você faz:

//@ManagedBean(name = "usuarioBean") @ManagedBean public class UsuarioBean { }
Você pode utilizar somente o @ManagedBean, que por padrão, ele já irá pegar o nome da classe (No caso UsuarioBean) seguindo os padrões, e ficaria usuarioBean, use name="" apenas se for colocar um mapeamento diferente.

Fica a dica :wink:

J

Cesar Pizolato:
value="#{usuarioBean.usuario.pessoa.nome}"
Dentro de usuário tem um objeto pessoa que tem um atributo nome? ou o nome fica no usuario?

value="#{usuarioBean.usuario.nome}"

Não carrega o objeto ou nao atualiza a tela?

Então, dentro de Usuario eu tenho um objeto pessoa onde tem o nome, ou seja (value="#{usuarioBean.usuario.pessoa.nome}") tá certo.
Ele não carrega o objeto, coloquei um Sysout no método assim:

public void buscaPorCPF() { System.out.println(this.documento.getNumero()); UsuarioRN usuarioRN = new UsuarioRN(); this.usuario.setPessoa(usuarioRN.buscarPessoaPorCPF(this.documento)); System.out.println(this.documento.getNumero()); }

E ele me retorna sempre NULL… O Select que ele monta está correto pois já executei no BD e funciona perfeitamente, então não é problema no mapeamento.

Estou ficando sem idéias já :cry:

C

Ele executa o método então ? Pq uma vez apanhei disso para cacete, ele não executava o método pq tinha um campo required=“true” e eu só ia preenchê-lo depois, do jeito que está ai, o nome está required, acho que ele só irá executar se o campo estiver preenchido, confirma ai…

J

Sim, ele executa o método porém já entra nele com os valores ‘null’…
Testei da forma que voc falou tirando o required mas mesmo assim não funciona.

Não entendo porque o valor do Cpf não chega no método…

V

Oi. Ao postar tópicos, por favor, NÃO USE CAIXA ALTA NO TÍTULO.

D

Fez passo a passo o Debug?

J

Oi, desculpem desenterra o tópico, mas queria saber como voce conseguiu resolver. Voce pode explicar a solução Juliana?

Obrigado

Criado 4 de outubro de 2011
Ultima resposta 21 de fev. de 2014
Respostas 16
Participantes 9