E aí pessoal, estou com um problema que parecia ser simples.
Tenho uma página (INDEX), que tém um autoComplete, do primefaces, juntamente com um botão que submete ou parte ou o valor selecionado do autocomplete para pesquisa, abaixo:
(INDEX):
<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="5"
size="82" converter="Converter" effect="slide" required="true"
requiredMessage="Digite um nome para pesquisa.">
</p:autoComplete>
</div>
<div id="botaopesq">
<p:commandLink actionListener="#{empresaBean.buscaPorNome}"
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}" />
</p:commandLink>
A action pesquisa, está abaixo, direcionaria para a página pesquisa:
<navigation-case>
<from-outcome>pesquisa</from-outcome>
<to-view-id>/publico/pesquisa.xhtml</to-view-id>
</navigation-case>
(PESQUISA)
<?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/templatePesquisa.xhtml">
<ui:define name="corpo">
<h:head>
<title>Luziânia OnLine</title>
</h:head>
<h:body>
<p:growl id="messages" autoUpdate="true" />
<h:inputHidden value="#{empresaBean.destinoSalvar}" />
<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="5"
size="60" converter="Converter" required="true"
requiredMessage="Valor obrigatório." autocomplete="true" />
<p:commandLink
actionListener="#{empresaBean.buscarPorNome}"
update="empresasTable">
<h:graphicImage library="images" name="botao.png" width="118"
height="27" style="border:0" />
</p:commandLink>
</div>
<h:outputLabel rendered="#{empty empresaBean.listaPesquisa}"
value="Refina sua pesquisa." />
<h:dataTable value="#{empresaBean.listaPesquisa}" var="empresa"
id="empresasTable" style="width:700px;">
<h:column>
#{empresa.nome} - #{empresa.email}
</h:column>
</h:dataTable>
<div class="container">
<ul >
<li><h:graphicImage library="imagensgalerialateral"
name="1.jpg" /></li>
</ul>
</div>
</h:form>
</h:body>
</ui:define>
</ui:composition>
</html>
Obtenho esse fluxo normalmente até aqui, o problema é que quando tento ir até a segunda página, a impressão que passa é a sessão “morrer” ali, ou seja, o autocomplete não funciona até que tenha uma interação com a página, como submeter um valor no campo e clicar sobre o botão CommandLInk e para fazer com que o botão funcione, preciso clicar duas vezes sobre ele. abaixo posto o ManagedBean.
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 javax.faces.event.ActionEvent;
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> listaPesquisa;
private List<Empresa> lista;
private String destinoSalvar;
public String novo() {
this.destinoSalvar = "empresaSucesso";
this.empresa = new Empresa();
return "empresa";
}
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 empresaRN = new EmpresaRN();
empresaRN.salvar(this.empresa);
return "empresaSucesso";
}
public String editar() {
return "/admin/empresa";
}
public String excluir() {
EmpresaRN empresaRN = new EmpresaRN();
empresaRN.excluir(this.empresa);
this.lista = null;
return null;
}
public List<Empresa> autocompleteEmpresa(String query) {
List<Empresa> queryResults = new ArrayList<Empresa>();
if (empresas == null) {
this.empresas = empresaRN.complete();
}
for (Empresa e : empresas) {
if (e.getNome().startsWith(query)) {
queryResults.add(e);
}
}
return queryResults;
}
public List<Empresa> getLista() {
if (this.lista == null) {
EmpresaRN empresaRN = new EmpresaRN();
this.lista = empresaRN.listar();
}
return this.lista;
}
public List<Empresa> buscarPorNome(ActionEvent event) {
if (this.listaPesquisa == null) {
this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
}
return this.listaPesquisa;
}
public boolean isEmpresaCadastrada(Empresa empresa) {
return empresaRN.verificaEmpresa(empresa.getNome());
}
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> getListaPesquisa() {
return listaPesquisa;
}
public void setListaPesquisa(List<Empresa> listaPesquisa) {
this.listaPesquisa = listaPesquisa;
}
public void setLista(List<Empresa> lista) {
this.lista = lista;
}
}
Agradeço desde já os que puderem ajudar.