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:
[code]public List 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;
}[/code]
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.
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>
[code]public List 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;
}[/code]
[code]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;
}[/code]