Popular campos selecionando um registro por autocomplete

0 respostas
S

Ola Pessoal

Estou encontrando dificuldades em popular os campos de meu form. Quando eu seleciono um Cep, ele deveria popular os campos municipio, endereco e bairro.

Alguém poderia me ajudar? Desde já agradeço.

Segue o código.

Cliente Bean.java

package br.com.bry.selecao.view.cliente;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ValueChangeEvent;

import br.com.bry.selecao.bean.Cliente;
import br.com.bry.selecao.bean.Empresa;
import br.com.bry.selecao.bean.Endereco;
import br.com.bry.selecao.business.ClienteBusiness;
import br.com.bry.selecao.business.EnderecoBusiness;
import br.com.bry.selecao.dto.DadosClienteDTO;
import br.com.bry.selecao.dto.EnderecoDTO;
import br.com.bry.selecao.util.TipoClienteEnum;

@ManagedBean
@ViewScoped
public class ClientesBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1089573907825696218L;

	private List<DadosClienteDTO> clientes = null;
	private List<EnderecoDTO> enderecos = new ArrayList<EnderecoDTO>();
	private boolean clienteSalvo;

	private String value = "";
	private String municipio = "";
	private String cep;
	private String bairro = " ";

	private Endereco enderecoEdicao;
	private Cliente clienteEdicao;
	private Long clienteEmEdicao;
	private int page = 1;
	
	private boolean emEdicao;

	private ClienteBusiness clienteBusiness;
	private EnderecoBusiness enderecoBusiness;
	
	
	
	@PostConstruct
	public void init() {
		
		clienteBusiness = new ClienteBusiness();
		enderecoBusiness = new EnderecoBusiness();
				
		novoCliente(TipoClienteEnum.PESSOA_FISICA);
		emEdicao = false;
	}

	public List<DadosClienteDTO> autocomplete(String prefixo) {
		
		setClientes(clienteBusiness.getClientes(prefixo));	

		return clientes;
	}
	
	public List<EnderecoDTO> autoCompleteCep(String prefixo) {
		setEnderecos(enderecoBusiness.getEnderecos(prefixo));
		return enderecos;
	}
	
	public void remove() {

		clienteBusiness.removerCliente(clienteEmEdicao);

		getClientes();
		
		novoCliente(TipoClienteEnum.PESSOA_FISICA);
	}

	public void acaoSalvar() {
		salvar();
	}

	public String acaoCadastroSucesso() {
		novoCliente(TipoClienteEnum.PESSOA_FISICA);
		return "/paginas/cliente/pesquisa";
	}

	public void salvar() {

		clienteEdicao.setId(clienteEmEdicao);
		
		setClienteSalvo(clienteBusiness.salvarCliente(clienteEdicao, municipio, enderecoEdicao));

		getClientes();
		clienteEmEdicao = null;
		novoCliente(TipoClienteEnum.PESSOA_FISICA);
	}

	public String getTituloCadastraEdita() {
		if (clienteEmEdicao == null) {
			return "Cadastro de Cliente";
		} else {
			return "Edição de Cliente";
		}
	}

	private void novoCliente(TipoClienteEnum tipoCliente) {
		clienteEdicao = new Cliente();
		clienteEdicao.setTipoCliente(tipoCliente);
		enderecoEdicao = new Endereco();
		clienteEdicao.setEmpresa(new Empresa());
		clienteEmEdicao = null;
	}

	public void limparCliente(ValueChangeEvent event) {
		novoCliente((TipoClienteEnum) event.getNewValue());
	}

	public List<DadosClienteDTO> getClientes() {
		synchronized (this) {
			clientes = new ArrayList<DadosClienteDTO>();
			if (value != null && !"".equals(value)) {
				clientes = clienteBusiness.getClientes(value);
			}
		}
		return clientes;
	}

	public void setClientes(List<DadosClienteDTO> clientes) {
		this.clientes = clientes;
	}
	
	public List<EnderecoDTO> getEnderecos() {
		synchronized (this) {
			enderecos = new ArrayList<EnderecoDTO>();
			if(cep != null && !"".equals(cep)) {
				enderecos = enderecoBusiness.getEnderecos(cep);
			} 
		}
		return enderecos;
	}
	
	
	public void setEnderecos(List<EnderecoDTO> enderecos) {
		this.enderecos = enderecos;
	}
	
	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}	

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public Cliente getClienteEdicao() {
		return clienteEdicao;
	}

	public void setClienteEdicao(Cliente clienteEdicao) {
		emEdicao = true;
		Set<Endereco> enderecos = clienteEdicao.getEnderecos();
		if (enderecos != null && !enderecos.isEmpty()) {
			this.enderecoEdicao = enderecos.iterator().next();
			this.municipio = enderecoEdicao.getMunicipio().getNome();
		}
		if (clienteEdicao.getEmpresa() == null) {
			clienteEdicao.setEmpresa(new Empresa());
		}
		this.clienteEdicao = clienteEdicao;
	}

	public Long getClienteEmEdicao() {
		return clienteEmEdicao;
	}

	public void setClienteEmEdicao(Long clienteEmEdicao) {
		setClienteEdicao(clienteBusiness.getCliente(clienteEmEdicao));
		this.clienteEmEdicao = clienteEmEdicao;
	}

	public String getMunicipio() {
		return municipio;
	}

	public void setMunicipio(String municipio) {
		this.municipio = municipio;
	}

	public boolean isEmEdicao() {
		return emEdicao;
	}

	public void setEmEdicao(boolean emEdicao) {
		this.emEdicao = emEdicao;
	}

	public Endereco getEnderecoEdicao() {
		return enderecoEdicao;
	}
	
	public void setEnderecoEdicao(Endereco enderecoEdicao) {
		emEdicao = true;
		Set<Endereco> enderecos = enderecoEdicao.getEnderecos();
		if (enderecos != null && !enderecos.isEmpty()) {
			this.enderecoEdicao = enderecos.iterator().next();
			this.municipio = enderecoEdicao.getMunicipio().getNome();
		}
		
		this.enderecoEdicao = enderecoEdicao;
	}

	public boolean isPessoaFisica() {
		return TipoClienteEnum.PESSOA_FISICA == clienteEdicao.getTipoCliente();
	}

	public boolean isClienteSalvo() {
		return clienteSalvo;
	}

	public void setClienteSalvo(boolean clienteSalvo) {
		this.clienteSalvo = clienteSalvo;
	}

}

endereco.xhtml

<!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:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich">

<rich:jQuery id="mskCEP" selector="#cep" timing="domready"
	query="mask('99999-999',{placeholder:' '})" />

<a4j:region>
	<h:panelGrid columns="3"
		columnClasses="colunaLabels,colunaCampos,colunaErros"
		id="enderecoGrid">

		<h:outputText value="#{msgs['cliente.label.cep']}" />
		<rich:autocomplete mode="cachedAjax" tokens=", " minChars="2" autofill="false"
			value="#{clientesBean.enderecoEdicao.cep}" autocompleteMethod="#{clientesBean.autoCompleteCep}"
            var="cliente" fetchValue="#{cliente.cep}"
            conveter="enderecoConverter">
            <rich:column>
				<b><h:outputText value="#{cliente.cep}" /></b>
				</rich:column>
							
            </rich:autocomplete>
        <rich:message id="cepMsg" for="cep" />

		<h:outputText value="#{msgs['cliente.label.municipio']}" />
		<h:inputText value="#{clientesBean.municipio}" size="40"
			id="municipio" required="true" requiredMessage="#{msgs['cliente.mensagem.requerido.municipio']}">
		</h:inputText>		
		
		<rich:message id="municipioMsg" for="municipio" />

		<h:outputText value="#{msgs['cliente.label.bairro']}" />
		<h:inputText value="#{clientesBean.enderecoEdicao.bairro}" size="40"
			id="bairro" required="true" requiredMessage="#{msgs['cliente.mensagem.requerido.bairro']}">
		</h:inputText>
		<rich:message id="bairroMsg" for="bairro" />

		<h:outputText value="#{msgs['cliente.label.endereco']}" />
		<h:inputText value="#{clientesBean.enderecoEdicao.endereco}" size="40"
			id="endereco" required="true" requiredMessage="#{msgs['cliente.mensagem.requerido.endereco']}">
		</h:inputText>
		<rich:message id="enderecoMsg" for="endereco" />

		<h:outputText value="#{msgs['cliente.label.numero']}" />
		<h:inputText value="#{clientesBean.enderecoEdicao.numero}" size="40"
			id="numero" required="true" requiredMessage="#{msgs['cliente.mensagem.requerido.numero']}">
		</h:inputText>
		<rich:message id="numeroMsg" for="numero" />

		<h:outputText value="#{msgs['cliente.label.complemento']}" />
		<h:inputText value="#{clientesBean.enderecoEdicao.complemento}"
			size="40" id="complemento">
		</h:inputText>
		<h:panelGroup />

		<h:outputText value="#{msgs['cliente.label.referencia']}" />
		<h:inputText value="#{clientesBean.enderecoEdicao.pontoReferencia}"
			size="40" id="referencia">
		</h:inputText>
		<h:panelGroup />


	</h:panelGrid>
</a4j:region>
</html>
Criado 4 de agosto de 2012
Respostas 0
Participantes 1