IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Changer des données d'une page en fonction de plusieurs champs


Sujet :

JSF Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut Changer des données d'une page en fonction de plusieurs champs
    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>

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    mettez une action dans votre commandLink qui pointe vers une méthode de votre bean et, dans cette méthode seulement, faites votre requete.
    Les valeurs du bean sont toujours initialisées avant l'exécution des actions dans JSF

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    David, merci beaucoup. Effectivement, cette méthode fonctionne très bien.

    Cependant, si je ne me trompe pas, je dois appeler ma requête deux fois: à l'init() pour avoir la liste complète (par défaut), puis lors de l'action associée au bouton de filtrage, pour récupérer les résultats de la requête bornée.
    Existe t'il un moyen de n'appeler ma requête qu'une seule fois?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    oui, ne pas mettre la requete dans l'action, mais la mettre dans le getter servant à retourner le résultat. Avec un schema du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private List<Resultats> resultats;
    public List<Resultats> getResultats(){
        if (resultats==null)
           resultats = rechercherResultats();
        return resultats;
    }

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Ben oui : je n'avais pas pensé à ça! Effectivement, ça le fait très bien!
    Merci beaucoup d'avoir éclairé mon incompétente lanterne!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer des données POST à une page !
    Par wishmastah dans le forum Langage
    Réponses: 11
    Dernier message: 11/04/2006, 19h37
  2. [Système] Extraire des données d'une page web
    Par nazoreen dans le forum Langage
    Réponses: 17
    Dernier message: 22/03/2006, 21h38
  3. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22
  4. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18
  5. Conserver des données d'une page à une autre...
    Par Angeldu74 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/08/2005, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo