[RESOLVIDO]Ajuda com AutoComplete

3 respostas
Diego_Adriano

Galera, alguém poderia me ajudar a implementar o meu AutoComplete a usar o nome e o sobrenome como parâmetro de busca?
Hoje faço utilizando somente o nome, gostaria de estender e filtrar tb pelo sobrenome:

view
<p:autoComplete value="#{lancamentoBean.clienteSelecionado}" completeMethod="#{lancamentoBean.completecliente}" 
			var="cliente" itemValue="#{cliente}" itemLabel="#{cliente.nome} #{cliente.sobrenome}"				 
			converter="Converter"
			size="50"
			onkeyup="this.value = this.value.toUpperCase();"/>
Bean:
public List<Cliente> completecliente(String query) {  

	ELContext context = FacesContext.getCurrentInstance().getELContext();
	this.entityManager = (EntityManager) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(context, null, "entityManager");
		
	ControleBoletoRepository repository = new ControleBoletoRepository(this.entityManager);
		
	List<Cliente> results = new ArrayList<Cliente>();
		
	if (clientes.isEmpty()){
		
		this.clientes = repository.clientes("A");
		
	}

	for(Cliente c : clientes){

		if (c.getNome().startsWith(query)){
			System.out.println(""+c.getNome()+" - "+c.getId()+"");
			results.add(c);
				
		}

	}
		
      return results; 
}

3 Respostas

Hebert_Coelho

Oq você poderia fazer era utilizar o método index of da string e achar o primeiro " ". O que vier depois é o sobrenome, com esse resultado faça a mesma verificação feita para o nome.

Diego_Adriano

Legal, vou testar …

Diego_Adriano

Bem, resolvi assim:

<h:outputText value="Nome: "/>
<p:autoComplete value="#{lancamentoBean.clienteSelecionado}" completeMethod="#{lancamentoBean.completecliente}" 
			var="cliente" itemValue="#{cliente}" itemLabel="#{cliente.nome} #{cliente.sobrenome}"				 
			converter="Converter"
			size="50"
			onkeyup="this.value = this.value.toUpperCase();">
	<p:ajax event="blur" update="formLancamento" listener="#{lancamentoBean.buscaSelecionado}" />
</p:autoComplete>
public List<Cliente> completecliente(String query) {  

	ELContext context = FacesContext.getCurrentInstance().getELContext();
	this.entityManager = (EntityManager) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(context, null, "entityManager");
		
	ControleBoletoRepository repository = new ControleBoletoRepository(this.entityManager);
		
	List<Cliente> results = new ArrayList<Cliente>();
		
	if (clientes.isEmpty()){
		
		this.clientes = repository.clientes("A");
		
	}
  
	for(Cliente c : clientes){
		String nome = c.getNome()+" "+c.getSobrenome(); 
		long id = c.getId();
		if (nome.startsWith(query)){
			results.add(c);
		}

	}
		
      return results; 
}
public Cliente buscaSelecionado(){
	try {
		ELContext elContext = FacesContext.getCurrentInstance().getELContext();
		this.entityManager = (EntityManager) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "entityManager");
		ControleBoletoRepository boletoRepository = new ControleBoletoRepository(this.entityManager);
		cliente = boletoRepository.consultaPorId(clienteSelecionado.getId());
			
		if (cliente.getId() > 0 || cliente.getId() != null){
			
			lancamento.setCliente(cliente);
			
		}else {
			FacesContext.getCurrentInstance().addMessage("consulta:id", new FacesMessage("CLIENTE NÃO CADASTRADO"));
		}
			
	} catch (Exception e) {
		// TODO: handle exception
	}
	return cliente;
}
Criado 29 de março de 2012
Ultima resposta 29 de mar. de 2012
Respostas 3
Participantes 2