Como exportar uma variável de uma classe xhtml para outra?

Boa tarde. Estou usando NetBeans e MySQL para disponibilizar informações online.
Para isso, estou utilizando Hibernate e JSF. Porém, estou tendo dificuldades no seguinte aspecto:
Inicialmente o usuário receberá uma solicitação de qual data deseja acessar os dados.
Por exemplo: do dia 25/02/2012 até 25/04/2012.
Isso é feito no index.xhtml.
Depois de preencher as datas e clicar em “Confirmar”, o usuário é redirecionado para outra janela (no java chamada List.xhtml), onde ele visualizará os dados que solicitou.
Porém, atualmente, já consegui fazer com que todos os dados (independente da data solicitada pelo usuário) sejam apresentados, mas não consigo fazer esta restrição.
Manipular com select em SQL seria fácil, mas no caso do Hibernate é necessário HQL, que não tenho tanto domínio, mas o principal problema, no caso, é com a orientação a objetos; fazer com que a primeira classe (index) “envie” os atributos para a segunda. Ou melhor: que a classe List “leia” os dados da primeira. Como a página é xhtml não é possível usar o public.
Já tentei criar uma classe Java para nela criar os Gets e Sets para fazer isso, mas como sou novo em programação Java não estou conseguindo fazer isso.
Para ser sincero, nem estou conseguindo fazer aparecer escrito para o usuário, na página de apresentação dos dados: “data solicitada: do dia 25/02/2012 à 25/04/2012”.
A única coisa que consegui até agora, foi na própria classe index (na primeira tela), quando o usuário clicar em “Confirmar”, antes de ser redirecionado de janela, aparecer um alerta escrito: “data solicitada: do dia 25/02/2012 à 25/04/2012”. =(

Agradeço a atenção,
Daniel Hannemann.

Se quiserem que eu mostre algum código basta avisar. Qualquer ajuda será muito bem vinda. Só falta isso para que eu consiga concluir meu projeto.

Porque você não cria um ManagedBean com escopo de sessão e guarda as variáveis nele ?

rmendes08 muito obrigado pela atenção e principalmente pela sua resposta! me ajudou muito, pois vc me disse a palavra chave, que eu utilizei para pesquisar e aprendi muito sobre o assunto e sobre minha dúvida.
Porém, depois de alguns esforços, não consegui completar o raciocínio para resolver meu problema. Segue os códigos do que implementei:

criei uma nova classe chamada Controle.java, com o objetivo de receber o valor dos dados da classe principal e depois passar estes valores a classe List.xhtml:

package br.jpa;

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "controle")
@SessionScoped
public class Controle implements Serializable {

private String dataIn;
private String dataFin;

public Controle(){
}

    public String getDataIn() {
      return dataIn;
    }
    
    public void setDataIn(String dataIn) {
      this.dataIn = dataIn;
    }
 
    public String getDataFin() {
      return dataFin;
    }
    
    public void setDataFin(String dataFin) {
      this.dataFin = dataFin;
    }    
}

na classe principal (index.xhtml), dentro de uma função que é executada quando o usuário clica em Concluir para ser redirecionada a segunda página, e ainda dentro do , implementei o código abaixo para pegar os valores das variáveis:

<script>
    DataI = DiaI+"/"+MesI+"/"+AnoI+" "+HoraI+":00";
    DataF = DiaF+"/"+MesF+"/"+AnoF+" "+HoraF+":00"; //para declarar o valor dos atributos data inicial e final

    var DI = new Controle();
    DI.setDataIn(DataI);
    var DF = new Controle();
    DF.setDataFin(DataF); // para declarar à classe Controle.java os valores anteriormente mencionados
</script>

na classe List.xhtml (que deve receber os valores declarados na classe index):

<h:outputText value="Data solicitada: de #{Controle.dataIn} à #{Controle.dataFin}"/> // recebe da classe Contrtole.java os valores para apresentar ao usuário

Com certeza fiz algo de errado, pois não está dando certo. Acredito que o erro esteja na classe principal, pois em nenhum lugar que pesquisei encontrei alguém ensinando a fazer os getters e setters em javascript, muito menos dentro de um xhtml.

Mesmo não conseguindo mais nada deste fórum já estou satisfeito com a ajuda que já recebi! :slight_smile:

Cara, com JSF você não precisa dessa manipulação toda de Javascript não. Você pode simplesmente especificar um formatador de data para o campo que ele inclusive converte o campo para o tipo Date, esse link tem um exemplo:

http://www.mkyong.com/jsf2/jsf-2-convertdatetime-example/

outra dica, quando você linka um campo da tela com uma variável no ManagedBean isso vale tanto para o get/set. Isso depende se você tem a implementação do método.

Fiz tudo conforme mostrado nesse link, porém está apresentando um problema que não consigo concertar (quando conseguir eu passo pra próxima etapa, de transformar o atributo pra variável date)
Deixei os códigos agora da seguinte maneira:

Na classe index.xhtml:

        <td>
            Entre com o ano Inicial:
            <select name="AnoInicial" id="AnoI" value="#{controle.anoI}">
                <option value="2013">2013</option>
                <option value="2012">2012</option>
                <option value="2011">2011</option>
                <option value="2010">2010</option>
            </select>
       </td>

no Controle.java:

import java.io.Serializable;
import java.util.Date;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="controle")
@SessionScoped
public class Controle implements Serializable{
private String anoI;
private String dataI = (diaI+"/"+mesI+"/"+anoI+" "+horaI+":00:00"); //não coloquei os códigos dos demais atributos para simplificar o raciocínio

    public String getAnoI() {
      return anoI;          
    }

    public void setAnoI(String anoI) {
      this.anoI = anoI;
    }

    public String getDataI() {
      return dataI;
    }
    
    public void setDataI(String dataI) { //imagino que não era necessário fazer o set do dataI, mas melhor sobrar do que faltar, e no futuro pode ser necessário de alguma forma
      this.dataI = dataI;
    }
}

no List.xhtml:

 <h:outputText value="Dia solicitado: #{controle.dataI}</h:outputText>

Porém, quando compilo, não aparece a data como deveria, e sim:
Data solicitada: null/null/null null:00:00

Com isso concluí que a classe List está recebendo os valores da Controle, mas esta não está recebendo da index por algum motivo.

O ideal é que você sempre monte a String no método getData

Mas tipo… mesmo que eu ponha:
<h:outputText value="Dia solicitado: #{controle.anoI}</h:outputText>
não dá certo. Aparece apenas escrito “Dia solicitado”, concluindo-se que o valor de anoI é null
Mas vlw pela dica! vou colocar no GetData agora a String

Finalmente consegui! Foi necessário utilizar Navegação Dinâmica.
Consegui fazer com que, ao selecionar a opção e posteriormente clicar em commandButton, ser redirecionado para a página dependendo da opção selecionada e nesta exibir a data inicial e final.

vou mostrar os códigos usados, pra caso alguém que esteja com um problema semelhante veja uma solução:

No index.xhtml:

<h:body>
<f:view>
<h:form id="consulta">
    Entre com a Estação:
            <h:selectOneMenu id="estacao" value="#{controle.estacao}">   //opções de estações, onde a marcada definirá a página do redirecionamento        
                <f:selectItem itemLabel="Opção 1" itemValue="faces/op1/List.xhtml"/>
                <f:selectItem itemLabel="Opção 2" itemValue="faces/op2/List.xhtml"/>
                <f:selectItem itemLabel="Opção 3" itemValue="faces/op3/List.xhtml"/>
            </h:selectOneMenu>

    Entre com a data Inicial:   
            <h:selectOneMenu id="date" value="#{controle.opcaoI}">   //opções de datas iniciais
                <f:selectItem id="item1" itemLabel="01/02/2013 00:00:00" itemValue="01-02-2013 00:00:00" />
                <f:selectItem id="item2" itemLabel="05/02/2013 03:00:00" itemValue="05-02-2013 03:00:00" />
                <f:selectItem id="item3" itemLabel="01/02/2013 03:00:00" itemValue="01-02-2013 03:00:00" />
                <f:selectItem id="item4" itemLabel="03/31/2013 12:00:00" itemValue="03-31-2013 12:00:00" />
                <f:convertDateTime type="TIMESTAMP" pattern="MM-dd-yyyy HH:mm:ss"/> 
            </h:selectOneMenu>

    Entre com a data Final:   
            <h:selectOneMenu id="date" value="#{controle.opcaoF}">      //opções de datas finais
                <f:selectItem id="item1" itemLabel="01/02/2013 00:00:00" itemValue="01-02-2013 00:00:00" />
                <f:selectItem id="item2" itemLabel="05/02/2013 03:00:00" itemValue="05-02-2013 03:00:00" />
                <f:selectItem id="item3" itemLabel="01/02/2013 03:00:00" itemValue="01-02-2013 03:00:00" />
                <f:selectItem id="item4" itemLabel="03/31/2013 12:00:00" itemValue="03-31-2013 12:00:00" />
                <f:convertDateTime type="TIMESTAMP" pattern="MM-dd-yyyy HH:mm:ss"/> 
            </h:selectOneMenu>



<h:commandButton value="Iniciar Consulta" action="#{controle.processar}"/> //comandButton que ao clicado é redirecionado

</h:form>
</f:view>
</h:body>

No Controle.java:

@ManagedBean(name="controle")
@SessionScoped
public class Controle implements Serializable{
String estacao;
String OpcaoI;
String OpcaoF;

    public String processar(){ //aqui efetuará a comunicação entre o comandButton e a estação
        return estacao;
    }

    public String getEstacao() { //gets e sets
      return estacao;          
     }
    public void setEstacao(String estacao) {
      this.estacao = estacao;
    }

    public String getOpcaoI() {
      return opcaoI;          
     }
    public void setOpcaoI(String opcaoI) {
      this.opcaoI = opcaoI;
    }

    public String getOpcaoF() {
      return opcaoF;          
     }
    public void setOpcaoF(String opcaoF) {
      this.opcaoF = opcaoF;
    }

No List.xhtml:

<h:outputText value="Data solicitada: de #{controle.opcaoI}"> à #{controle.opcaoF}"></h:outputText> //Exibição da data solicitada

No Faces-config.xml:

    <managed-bean> 
<managed-bean-name>controle</managed-bean-name> //nome do managed bean
<managed-bean-class>jsf.Controle</managed-bean-class> //pacote e página em que se encontra a comunicação entre o index e o List
<managed-bean-scope>session</managed-bean-scope> //conforme mostrado no Controle: @SessionScoped
    </managed-bean>
    
    <navigation-rule>
        <from-view-id>/index.xhtml</from-view-id> //página que verificará a transição de páginas na navegação
        <navigation-case>
            <from-outcome>op1</from-outcome> //se a opção da estação for "op1", então...
            <to-view-id>/op1/List.xhtml</to-view-id> //...será redirecionado ao List.xhtml da página op1
        </navigation-case>
        <navigation-case>
            <from-outcome>op2</from-outcome>
            <to-view-id>/op2/List.xhtml</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>op3</from-outcome>
            <to-view-id>/op3/List.xhtml</to-view-id>
        </navigation-case>

Espero que tenha dado pra entender, e que não tenha ficado muito confuso
Se alguém estiver com dúvida em algo sobre isso, basta perguntar que eu tento responder

Valeusão aí rmendes08, vc foi de grande ajuda na solução do meu problema! ^^
A propósito… eu tbm removi quase toda a manipulação de javascipt do meu projeto, até pq no “form” havia um “onsubmit” e somente ao removê-lo foi possível resolver o meu problema (aparentemente não é possível um “onsubmit” no form e um “action” no “commandButton” ao mesmo tempo e isso fazia ele ignorava o “action”), conforme mostrado abaixo

<h:form id="consulta" onsubmit="ProcuraErros(Estação); return false">

<h:commandButton  type="submit" value="Iniciar Consulta" action="controle"/>

E tbm segui seu conselho e coloquei a montagem da String nos getDatas

    public String getDataI() {
      dataI = (diaI+"/"+mesI+"/"+anoI+" "+horaI+":00");
      return dataI;
    }