É o seguinte; tenho uma consulta, que funciona da seguinte maneira:
Quando o usuário submeter o valor através de um autocomplete do primefaces, deverá retornar uma pesquisa através de um like.
Gostaria de paginar o resultado, mas estou infrentando um problema. Quero faze-lo com primefaes, então, quando uso o scopo View o autocomplete pára de funcionar e a página não é direcionada. se uso requestScoped, o autocomplete funciona, porém não pagina.
e aí o que eu faço?
meu bean:
package com.portal.web;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import com.portal.empresa.Empresa;
import com.portal.empresa.EmpresaRN;
@ManagedBean
@RequestScoped
public class EmpresaBean {
private Empresa empresa = new Empresa();
private EmpresaRN empresaRN = new EmpresaRN();
private List<Empresa> empresas;
private List<Empresa> pesquisa;
private String destinoSalvar;
// Retorna a página para a inserçao de novos valores
public String novo() {
this.destinoSalvar = "empresaSucesso";
this.empresa = new Empresa();
return "empresa";
}
// Persiste objetos
public String salvar() {
FacesContext context = FacesContext.getCurrentInstance();
if (isEmpresaCadastrada(empresa)) {
FacesMessage facesMessage = new FacesMessage(
"Digite um nome diferente de empresa, esta já está cadastrada.");
context.addMessage(null, facesMessage);
return null;
}
empresaRN.salvar(this.empresa);
return "empresaSucesso";
}
// Direciona à pagina editar
public String editar() {
return "/admin/empresa";
}
// Exclui objetos
public String excluir() {
empresaRN.excluir(this.empresa);
this.empresas = null;
return null;
}
// Autocompleta
public List<Empresa> autocompleteEmpresa(String query) {
List<Empresa> queryResults = new ArrayList<Empresa>();
if (this.empresas == null) {
this.empresas = empresaRN.complete();
}
for (Empresa e : empresas) {
if (e.getNome().startsWith(query)) {
queryResults.add(e);
}
}
return queryResults;
}
// Lista todos os valores
public List<Empresa> getLista() {
if (this.empresas == null) {
this.empresas = empresaRN.listar();
}
return this.empresas;
}
// Lista com base nos nomes
public List<Empresa> buscarPorNome() {
if (this.empresas == null) {
String nome = empresa.getNome();
empresas = empresaRN.buscaPorNome(nome);
}
return this.empresas;
}
// Verifica se já está cadastrada, caso positivo, valida na view.
public boolean isEmpresaCadastrada(Empresa empresa) {
return empresaRN.verificaEmpresa(empresa.getNome());
}
// GETERS/SETERSS
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
public EmpresaRN getEmpresaRN() {
return empresaRN;
}
public void setEmpresaRN(EmpresaRN empresaRN) {
this.empresaRN = empresaRN;
}
public List<Empresa> getEmpresas() {
return empresas;
}
public void setEmpresas(List<Empresa> empresas) {
this.empresas = empresas;
}
public String getDestinoSalvar() {
return destinoSalvar;
}
public void setDestinoSalvar(String destinoSalvar) {
this.destinoSalvar = destinoSalvar;
}
public List<Empresa> getPesquisa() {
return pesquisa;
}
public void setPesquisa(List<Empresa> pesquisa) {
this.pesquisa = pesquisa;
}
}
página:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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:p="http://primefaces.org/ui">
<ui:composition template="/templates/templatePrincipal.xhtml">
<ui:define name="corpo">
<h:head>
<title>Luziânia OnLine</title>
</h:head>
<h:body>
<f:view>
<p:growl id="messages" autoUpdate="true" />
<h:form>
<div id="campos">
<p:autoComplete id="complete" value="#{empresaBean.empresa}"
var="empresa" completeMethod="#{empresaBean.autocompleteEmpresa}"
itemLabel="#{empresa.nome}" itemValue="#{empresa}"
onkeyup="this.value = this.value.toUpperCase();" maxResults="9"
size="82" converter="Converter" required="true"
requiredMessage="Digite um nome para pesquisa.">
</p:autoComplete>
</div>
<div id="botaopesq">
<h:commandLink actionListener="#{empresaBean.buscarPorNome}"
title="Pesquisar" value="#{nome}" action="pesquisa">
<h:graphicImage library="images" name="botao.png" width="118"
height="27" style="border:0" />
<f:setPropertyActionListener target="#{empresaBean.empresa}"
value="#{empresa.nome}" />
</h:commandLink>
</div>
</h:form>
</f:view>
</h:body>
</ui:define>
</ui:composition>
</html>