@RaulCrash, já me deu esperanças de resolver esse problema que achei que era irresolúvel. Valeu demais!!!
Eu queria só uma ajuda pra me dizer o que estou errando, por favor.
Eu percebi que usando o @RequestScoped, o servidor faz várias requisições no meu Bean de filtro, mas quando eu chamo a função buscar, função esta responsável por alimentar os dados do filtro, ele não recupera a informação que selecionei no meu combo. Veja se pode me dizer o que estou fazendo de errado.
Essa é a Bean do meu filtro
@ManagedBean(name=“compraBean”)
@RequestScoped
public class CompraBean implements Serializable{
…/
public void buscarAnuncio() throws IOException{
try{
//final Anuncio anuncio = new Anuncio();
if(!(idID == null) && !(idID.equals(""))){
anuncio.setId(Integer.parseInt(idID));
}
if(!(idMarca == null) && !(idMarca.equals(""))){
marca = new DAO<Marca>(Marca.class).buscaPorId(Integer.parseInt(idMarca));
anuncio.setMarca(marca);
}
if(!(idModelo == null) && !(idModelo.equals(""))){
modelo = new DAO<Modelo>(Modelo.class).buscaPorId(Integer.parseInt(idModelo));
modelo.setMarca(marca);
anuncio.setModelo(modelo);
}
if(!(idVersao == null) && !(idVersao.equals(""))) {
versao = new DAO<Versao>(Versao.class).buscaPorId(Integer.parseInt(idVersao));
versao.setModelo(modelo);
anuncio.setVersao(versao);
}
if(!(idAnoMod2 == null) && !(idAnoMod2.equals("Selecione"))){
anomodelo2 = new DAO<Ano>(Ano.class).buscaPorId(Integer.parseInt(idAnoMod2));
anuncio.setAnofabricacao(anomodelo2.getAno());
}
if(!(idAnoMod == null) && !(idAnoMod.equals("Selecione"))){
anomodelo = new DAO<Ano>(Ano.class).buscaPorId(Integer.parseInt(idAnoMod));
anuncio.setAnomodelo(anomodelo.getAno());
}
if(!(idEstado == null) && !(idEstado.equals(""))){
estado = new DAO<Estado>(Estado.class).buscaPorId(Integer.parseInt(idEstado));
anuncio.setEstado(estado);
}
if(!(idCidade == null) && !(idCidade.equals(""))){
cidade = new DAO<Cidade>(Cidade.class).buscaPorId(Integer.parseInt(idCidade));
anuncio.setCidade(cidade);
}
}
FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext().redirect("buscapadrao.xhtml");
}catch(Exception ex){
System.out.println("Erro ao buscar anúncio");
ex.getMessage();
}
}
}
Este é a função chamada pelo .xhtml
<p:commandButton value="Buscar" id="busca" styleClass="btBuscar">
<p:ajax event="click" listener="#{compraBean.buscarAnuncio}" process="@this"/>
</p:commandButton>
Já este é o Bean responsável pela transição das páginas, por recuperar os dados do filtro e apresentar na página com o ViewScoped.
@ManagedBean
@ViewScoped
public class BuscaBean implements Serializable{
/**
*
*/
private static final long serialVersionUID = -3259475072329382298L;
@ManagedProperty(value="#{compraBean}")
private CompraBean filtroUsuarioBean;
@PostConstruct
public void init(){
try{
anuncio = filtroUsuarioBean.getAnuncio();
if(!anuncio.equals(null)){
model = new LazyDataModel<Anuncio>() {
private static final long serialVersionUID = 1L;
@Override
public List<Anuncio> load(int first, int pageSize, String sortField, SortOrder sortOrder,
Map<String, Object> filters) {
filtro.setPrimeiroRegistro(first);
filtro.setQuantidadeRegistros(pageSize);
filtro.setAscendente(SortOrder.ASCENDING.equals(sortOrder));
filtro.setPropriedadeOrdenacao(sortField);
setRowCount(new DAO<Anuncio>(Anuncio.class).quantidadeFiltrados(anuncio, precos, filtro));
busca = new DAO<Anuncio>(Anuncio.class).buscaAnuncio(anuncio, precos, filtro);
return busca;
}
};
}
}catch(Exception ex){
}
}
Acreditava que ao redirecionar a página pelo Bean do filtro, o Bean das transições seria chamado, mas não aconteceu e também o filtro com o escopo de requisição não guardou os dados no meu objeto de filtro.
Na página buscapadrao.xhtml, página de destino(seria a página da datatable) eu chamo os objetos da #{buscaBean.anuncio}, achei que isso também faria startar a managedbean da viewScoped, mas não
Percebeu que sou bem novato nisso , se puder me ajudar, agradeço muito.
Obrigado por enquanto