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:
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:
DWR
JSF2 possui suporte nativo à ajax.
A documentação é bem tranquila e existem vários exemplos na internet.
Alguém sabe onde tem algum exemplo?
Obrigada
Utiliza JSF “puro” ou com framework adicional ? (Primefaces, RichFaces, … )
Segue um exemplo, utilizando http://primefaces.org/ ,neste exemplo o cara digitava o cep, ele consultava no banco e carregava o endereço
[code]<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"/>[/code]
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
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
[code]<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>[/code]
meu ManagedBean
[code]@javax.faces.bean.ManagedBean(name = “usuarioBean”)
@RequestScoped
public class UsuarioBean {
private Usuario usuario = new Usuario();
private List 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;
}
}[/code]
Alguém pode me ajudar por favor?
sou meio leigo ainda, sera que seu bean nao devia ser ?? @SessionScoped ?? testa ai
Já tentei isso
Tá difícil encontrar uma solução viu…
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?
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
[quote=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?[/quote]
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á ’
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…
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…
Oi. Ao postar tópicos, por favor, NÃO USE CAIXA ALTA NO TÍTULO.
Fez passo a passo o Debug?
Oi, desculpem desenterra o tópico, mas queria saber como voce conseguiu resolver. Voce pode explicar a solução Juliana?
Obrigado