Bonjour,

je ne sais pas si mon titre était clair, alors je vais essayer de l'être plus ici :
il s'agit pour moi d'afficher une page avec le résultat d'une requête en DB.

Fonctionnellement :
  • En tête de la page, des champs permettent de borner le champ de la requête (Dates, statut, etc.). Par défaut, aucune réduction n'est appliquée : les bornes sont à null/zéro;
  • Sous ceux-ci, un bouton permet d' "appliquer les bornes de la recherche"
  • En dessous, une table indique le résultat de la requête.


Mon problème est que je ne sais pas comment faire en sorte que les valeurs des bornes soient récupérées dans le bean avant que je n'exécute ma requête : pour l'instant, mon "init()" (dans le bean) est appelé avant les setters de mes bornes, et donc je ne sais pas remplir mes tables en fonction des nouvelles bornes... à la place, j'applique toujours une requête non bornée.

J'avais pensé que faire un binding sur l'objet de la borne ferait l'affaire, mais son setter est aussi appelé après le "init()".

Pour terminer... je ne sais vraiment pas comment faire ça, et pourtant je suis certain que c'est quelque chose de tout à fait classique (peut-être faut-t'il jongler avec les phases? Reposter quelques événements? )
Si un spécialiste de ce classique a la clef... je lui en serai (presque) éternellement reconnaissant!


-------------------------------------------------------------------------------------------------
une idée de ce à quoi ça ressemble (c'est purement spéculatif : c'est un code écrit pour l'exemple) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private Date dateDebut;    // + public getter/setter
private Date dateFin;      // + public getter/setter
private int Statut;        // + public getter/setter                        
private double montantMin; // + public getter/setter                                     
private double montantMax; // + public getter/setter
 
private List<Resultats> listeResultats;    // + public getter/setter
 
@PostConstruct
public final void init() {
 
	// Various initializations
	...
 
	// Computes the request
	listeResultats = MonService.getFilteredInfoFromDB(dateDebut,dateFin,Statut,montantMin,montantMax);
 
	}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<h:form id="mon_form"">
  <rich:calendar id="start_date" required="false" datePattern="dd/MM/yyyy" 
    value="#{monBean.startDate}">
  </rich:calendar>
  <rich:calendar id="end_date" required="false" datePattern="dd/MM/yyyy" 
    value="#{monBean.startDate}">
  </rich:calendar>
  <h:inputText id="statut" required="false" 
    value="#{monBean.Statut}">
  </h:inputText>
  <h:inputText id="montant_min" required="false"
    value="#{monBean.montantMin}">
  </h:inputText>
  <h:inputText id="montant_max" required="false" 
    value="#{monBean.montantMax}">
  </h:inputText>
 
  <h:commandLink reRender="mon_form">
    <span>
      <h:outputText value="Appliquer les bornes à la recherche" />
    </span>
  </h:commandLink>
 
  <rich:extendedDataTable	
      value="#{monBean.listeResultats}" 
      var="resultat">
    <f:facet name="caption">
      <h:outputText value="Résultat de votre requête"/>
    </f:facet>
    <rich:column>
      <h:outputText value="#{resultat.label}" />
    </rich:column>
    <rich:column>
      <h:outputText value="#{resultat.value}" />
    </rich:column>
  </rich:extendedDataTable>
 
</h:form>