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

Servlets/JSP Java Discussion :

formulaire de recherche avec plusieurs paramaitres


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut formulaire de recherche avec plusieurs paramaitres
    Bonjour ,
    J'ai un formulaire avec par exemple 3 ou 4 paramaitres de recherches.
    Dans ma méthode de recherche, j'ai une requete qui me faits "Select .... from ... where param1=.....AND param2=.... AND param3=....."
    Dans ce cas la obligatoirement je doit remplir les 3 champs.
    Mais je veux que si je saisie un seul champ, la sélection se faits juste sur ce champs. Si je saisie 2 champs, la sélection se faits sur 2 champs, .....
    Donc, je doit faire 3 méthodes ou quoi???
    Une avec un seul paramaitre, l'autre avec 2 , et l'autre avec 3; leurs faire appel selon le cas ou comment?
    Merciiii

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    oui, maintenant, le plus simple est de regrouper ca en une seule méthode qui construit ta requte sql en fonction des valeur soumise. Genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    StringBuilder b = new StringBuilder("Select .... from ... where param1=.....");
    if (param2!=null)
     b.append("AND param2=....");
    if (param3!=null)
     b.append("AND param3=.....");

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    oui, maintenant, le plus simple est de regrouper ca en une seule méthode qui construit ta requte sql en fonction des valeur soumise. Genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    StringBuilder b = new StringBuilder("Select .... from ... where param1=.....");
    if (param2!=null)
     b.append("AND param2=....");
    if (param3!=null)
     b.append("AND param3=.....");
    Merci tchize, c'est génial comme réponse, reste petite question:
    Je travaille avec EJB, donc dans le modele, j'ai faits un namedQuery= "select.. from... where param1=.... and param2=...)
    Et dans mon sessionBean,
    j'ai juste passé mes parametres à ce namedQuery comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Query query = em.createNamedQuery("findObjects");
    		query.setParameter("annee", annee);
    		query.setParameter("numero", num);
                              query.setParameter("libelle", libelle);
    Donc, à ce que je pense, je vais faire ma requete directement dans mon sessionBean??

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ha oui, namedquery. Ben soit tu fait la requete directement dans l'EJB si t'as beacoup de combinaisons possible, soit tu fais plusieurs namequery si peu de combinaisons, à toi de voir

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ha oui, namedquery. Ben soit tu fait la requete directement dans l'EJB si t'as beacoup de combinaisons possible, soit tu fais plusieurs namequery si peu de combinaisons, à toi de voir
    Voila ma proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public List<Object> findObjectsByAnnee(int annee, int num) {
    StringBuilder b = new StringBuilder("select o from Object o where o.anneObj= :annee");
    if (num != 0)
     b.append("AND o.num= :num");
    Query query = em.createQuery(b.toString());
    List<Object> objects = query.getResultList();
    return objects ;
    c'est juste comme ça?
    je l'ai crée directement dans mon sessionBean.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    a priori, c'est bon

  7. #7
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    a priori, c'est bon
    ouuuupss, noo, ça passe pas
    je reçoit cet erreur, en appelant la page de recherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.QueryException: Not all named parameters have been set:[annee] [select o from Object o where o.anneObj= :annee]
    Car la méthode reçoit deux paramaitres , alors qu'il ne voit que le premier paramaitre qui suit le Select...
    c'est ce que j'ai compris de l'erreur..., non?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    non, c'est juqte que la t'as construit ta query, mais tu ne lui a pas passé les paramètre. Tu dois avoir une appel du genre setParameter("annee",annee)

  9. #9
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    dsl tchize,
    mais c'est la derniere question je pense, et tout sera ,
    Voila, mon DAO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public List<Object> findObjects(int annee, int num) {
    		StringBuilder b = new StringBuilder("select o from Object o where o.anneO= :annee");
    		if (num != 0)
    		 b.append(" AND o.num= :num");
    		Query query = em.createQuery(b.toString());
    		query.setParameter("annee", annee);
    		query.setParameter("num", num);
    		List<Object> objects= query.getResultList();
    		return objects;
    }
    Si je le teste comme application java, ça passe bien
    Mais je teste avec un formulaire, j'aurais cet erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    could not locate named parameter [num].....
    et voici mon conroler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try {
    			context = new InitialContext();
     
    		obj= (ObjDAORemote) context.lookup("ObjDAO/remote");
    	objects=obj.findObjects(o.getAnneObject(), o.getNum());
    		}
    		catch (NamingException e) {
    			e.printStackTrace();
    		}
    		return objects;

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ben oui, si t'as pas mi :num dans la requete, faut pas appeler le setParameter non plus

  11. #11
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ben oui, si t'as pas mi :num dans la requete, faut pas appeler le setParameter non plus
    j'ai changé comme ça, en ajoutant dans le requete :num
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringBuilder b = new StringBuilder("select o from Object o where o.anneO= :annee AND o.num= :num ");
    mais ça passe seulement si je mets les deux parametres dans le formulaire.
    Si je mets que le premier parametre ça passe pas, ça me rends java.lang.IllegalArgumentException sur la console.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ben c'est ce que je dit, si tu le met pas dans la requete, t'appelle pas non plus le setparameter associé....

  13. #13
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    ohhh lala,
    Mais je vous ai dits que je l'ai ajouté dans la réquete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringBuilder b = new StringBuilder("select o from Object o where o.anneO= :annee AND o.num= :num ");
    Ou vous voulez que je le mette pas??
    SVP corrigez moi sur mon code si vous pouvez.
    Et merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    dans ton code de départ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public List<Object> findObjects(int annee, int num) {
    		StringBuilder b = new StringBuilder("select o from Object o where o.anneO= :annee");
    		if (num != 0)
    		 b.append(" AND o.num= :num");
    		Query query = em.createQuery(b.toString());
    		query.setParameter("annee", annee);
    		query.setParameter("num", num);
    		List<Object> objects= query.getResultList();
    		return objects;
    }
    il est évident que si num==0, tu dois aussi omettre query.setParameter("num", num), puisque u as omis le AND o.num= :num

  15. #15
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Voila le code final, que j'ai mis, si je vous ai bien compris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public List<Object> findObjects(int annee, int num) {
    		StringBuilder b = new StringBuilder("select o from Object o where o.anneO= :annee AND o.num= :num");
    		if (num != 0)
    		 b.append(" AND o.num= :num");
    		Query query = em.createQuery(b.toString());
    		query.setParameter("annee", annee);
    		query.setParameter("num", num);
    		List<Object> objects= query.getResultList();
    		return objects;
    }
    Dans l'interface graphique:
    Si je mets seulement l'annee, ça passe pas , et ça rends aucune erreur. Et si je remplit les deux cases (annee et numero), ça me rend l'object recherché, s'il existe.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    relit bien mon dernier message, tout est dedans, je vais pas écrire le code à ta place d'autant qu'il s'agit d'une ligne

Discussions similaires

  1. VBA-E Comment réaliser une recherche avec plusieurs critères ?
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/12/2006, 14h43
  2. formulaire de recherche avec les dates
    Par chelmi95 dans le forum Access
    Réponses: 5
    Dernier message: 25/10/2006, 22h00
  3. Réponses: 7
    Dernier message: 31/08/2006, 15h11
  4. [VBA-E]rechercher avec plusieur critère.
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/06/2006, 20h48
  5. Réponses: 6
    Dernier message: 04/11/2005, 18h09

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