Tela de Pesquisa

3 respostas
primefacesjava
A

Estou começando um projeto Primefaces e estou com um problema. Tenho uma tela de busca, onde o usuário digita alguns campos para utilizar no search. Apos realizar a consulta, redireciono para outra pagina, a pagina que possui uma listagem, porem quando redireciono é gerado um bean novo, e o que foi salvo na lsitagem é perdido.
Como resolver sem utilizar @SessionScoped no manageBean desta tela?

Observação, redireciono assim:

FacesContext
   .getCurrentInstance()
   .getExternalContext()
   .redirect("/tcc/sistema/usuario/list.xhtml");

3 Respostas

RaulCrash

A tela de Pesquisa e Resultado pertence ao um único ManagedBean?

A

Não, esse é o problema, são ManageBeans diferentes…

RaulCrash

@augusto340 ficaria assim adequa a lógica no seu código:

Primeira Controller

@ManagedBean(name="testeJSF")
@ViewScoped
public class TesteJSF {
    
    private String pesquisa;
    
    public String trazerResultado(){
        System.out.println("Controler1"+pesquisa);
        pesquisa = pesquisa+" ok";
        //            FacesContext
//               .getCurrentInstance()
//               .getExternalContext()
//               .redirect("/teste/result.jsf");
        return "/teste/result.jsf"; //Pode fazer assim que irá redirecionar p/ pagina que voce quer
    }
    
    public String getPesquisa() {
        return pesquisa;
    }

    public void setPesquisa(String pesquisa) {
        this.pesquisa = pesquisa;
    }
    
}

Segunda Controller

@ManagedBean(name="testeJSF2")
@ViewScoped
public class TesteJSF2 {
    
    @ManagedProperty(value="#{testeJSF}")
    private TesteJSF testeJSF;
    
    private String resultPesquisa;

    public TesteJSF getTesteJSF() {
        return testeJSF;
    }

    public void setTesteJSF(TesteJSF testeJSF) {
        this.testeJSF = testeJSF;
    }

    public String getResultPesquisa() {
        resultPesquisa = testeJSF.getPesquisa();
        System.out.println("Controler2"+resultPesquisa);
        return resultPesquisa;
    }

    public void setResultPesquisa(String resultPesquisa) {
        this.resultPesquisa = resultPesquisa;
    }
    
}

Parte do primeiro XHTML:

<h:form>
        <h:panelGrid styleClass="mypanelGrid" columns="2" >
            <h:outputLabel value="Busca" for="login"/>
            <h:inputText id="login" value="#{testeJSF.pesquisa}"/>
            <h:commandButton actionListener="#{testeJSF.trazerResultado}" value="Call" update="@form" >
            </h:commandButton>
        </h:panelGrid>
    
    </h:form>

Parte do segundo HTML recebendo o valor que veio da primeira XHTML e Controller:

<h:form>
        <h:panelGrid styleClass="mypanelGrid" columns="2" >
            #{pesquisa}
            <h:inputText id="login" value="#{testeJSF2.resultPesquisa}"/>
        </h:panelGrid>
    
    </h:form>

Estuda este cara ai o @ManagedBean vai ser de grande utilidade p/ você, só não abusa p/ não virar bagunça. Qualquer coisa é só falar :wink:

Criado 6 de novembro de 2016
Ultima resposta 11 de nov. de 2016
Respostas 3
Participantes 2