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 :

Problème avec les clés étrangères et selectOneMenu


Sujet :

JSF Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut Problème avec les clés étrangères et selectOneMenu
    Bonjour à tous,
    je travaille sur un projet web /J2EE (base de données MySQL+JPA+DAO+JSF)
    j'ai un soucis avec les clés étrangères, en fait, j'ai une table examen médical qui possède une clé étrangère faisant référence à la table patient,
    j'arrive à ajouter des patients, mais, ceci, je n'arrive pas à le faire pour le cas des examens, voici mon code JSF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <f:view>
            <h:form>
                <h:panelGrid columns="2">
    ..........................................................
    ...........................................................
     
                    <h:outputText value="IdPatient:"/>
                    <h:selectOneMenu id="idPatient" value="#{patientmanager.nom}" title="IdPatient" required="true">
                   <f:selectItems value="#{patientmanager.allPatients}"/>
                    </h:selectOneMenu>
                </h:panelGrid>
            </h:form>
        </f:view>
    Avant meme d'ajouter un bouton de validation, j'ai fais l'exécution, j'obtiens,
    l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.servlet.ServletException: Argument Error: 
    An option for component idPatient was not an instance of javax.faces.model.SelectItem.  
    Type found: java.util.ArrayList.
    voici le code de la méthode AllPatients qui se trouve dans PatientsDAO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      public List<Patients> getAllPatients() {
         List<Patients> users = em.createQuery("select a from Patients a").getResultList();
         return users;
     }
    D'après l'exception trouvée, je comprends qu'il faut utiliser SelectItem au lieu de ArrayList, mais, je ne sais pas comment faire.
    svp, y a -t- des personnes que peuvent m'aider, je sais que ceci est très facile pour quelques personnes, mais, tous, nous devons commencer par des chose débutantes pour devenir un jour des experts.
    Merci d'avance.

  2. #2
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Bonsoir,
    peut être mon problème n'est pas bien expliqué, en effet, je n'arrive pas à bien comprendre comme mettre en considération les associations (dépendance par des clés étrangères entre les tables), par exemple, j'ai une table patients et une table examens, la relation patient-examen est une relation 1-N, mon problème est l'ajout des examens à un patient, est ce que la méthode "addExamentoPatient" je dois la créer dans la session bean patient ou examen , de plus la recherche des examens d'un patient à partir de son nom.
    svp, y a -t-il des personnes qui peuvent m'aider à résoudre mon problème, en fait, je me trouve seul devant un projet qui doit être terminé et évalué ces jours. c'est pourquoi, j'ai posé mon problème dans ce forum en espérant avoir des coups de main.
    j'attends vos aides et je vous remercie d'avance.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 64
    Points
    64
    Par défaut
    "select a from Patients a"
    est ce que tu es sur de cette requête???

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Citation Envoyé par metwa Voir le message
    est ce que tu es sur de cette requête???
    Je ne pense pas que le problème vienne de cette requête. Elle signifie simplement select * from Patients...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Bonjour,
    comme il a dit romaintaz, ce n'est pas mon problème avec ça, déjà, j'ai une page jsp qui m'affiche la liste des patients, j'ai utilisé cette requête et ça marche.
    J'arrive à afficher la liste des patients, créer un nouveau patient, mais la création d'un nouveau examen pour un patient particulier, je n'arrive pas à le faire depuis 3 jours.

    Voici la jointure entre les deux entités:
    dans l'entité examen:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @JoinColumn(name = "ID_PATIENT", referencedColumnName = "ID")
        @ManyToOne(optional = false)
        private Patients idPatient;
    et dans l'entité patient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idPatient")
        private List<Examens> examensCollection;
    merci d'avance de m'aider.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Bonjour,
    enfin j'ai avancé un peu, en fait, j'ai modifié le code jsf par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <h:outputText value="Nom du patient:"/>
                    <h:selectOneMenu id="idPatient" value="#{patientmanager.nom}" title="IdPatient" required="true">
                        <f:selectItems value="#{patientmanager.selectPatients}"/>
                    </h:selectOneMenu>
    </h:panelGrid>
                 <h:commandButton id="submit"
                                 value="Ajouter examen"
                                 action="#{examenmanager.createExamen}"/>
                <h:messages style="color: red" globalOnly="true"/>
            </h:form>
        </f:view>
    et la méthode selectPatients
    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
    public List<SelectItem> getSelectPatients() {
     List<Patients>  ltl;
     Patients ll=null;
     List<SelectItem> pat = new ArrayList<SelectItem>();
     
     ltl = em.createQuery("SELECT y FROM Patients y").getResultList();
     
     for(Iterator<Patients> lli = ltl.iterator(); lli.hasNext(); ) {
     ll=lli.next();
     SelectItem si = new SelectItem(ll.getId(),ll.getNom());
     //System.out.println(si.getValue().getClass());
     //System.out.println(si.getValue());
     //System.out.println(si.getLabel());
     pat.add(si );
     }
     
     return(pat);
     }
    la méthode de création d'un nouveau examen:
    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
     public String createExamen() {
            FacesContext context = FacesContext.getCurrentInstance();
            Examens wuser = getExamen();
            if (wuser == null) {
     
                    return null;
                }
                wuser = new Examens();
                wuser.setDateEx(dateEx);
                wuser.setModalite(modalite);
                wuser.setIdPatient(idPatient);
                try {
                    utx.begin();
                    em.persist(wuser);
                    utx.commit();
                    return "validerExamen";
                } catch (Exception e) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                            "Erreur!",
                                                            "Contactez l'administrateur du système");
                    context.addMessage(null, message);
     
                    return null;
                }
            }
    et quant au fichier de configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <navigation-rule>
    <description>creation un nouveau examen</description>
    <from-view-id>/NouveauExamen.jsp</from-view-id>
    <navigation-case>
    <from-outcome>validerExamen</from-outcome>
    <to-view-id>/essaiEx.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>
    donc, à l'exécution, je n'obtiens aucun erreur, j'ai essayé de remplir les champs, j'ai fait mon choix du patient, et lorsque je termine et je fais un clic sur le bouton "Ajouter examen", il n'y a pas passage à la deuxième page et meme pas des erreurs et pas d'ajout du nouveau examen.
    svp, quelqu'un peut m'aider?
    merci.

  7. #7
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Salut,
    j'ai modifié la méthode createExamen, en fait, j'ai fait une bête faute dans l'ancien code, voici le nouveau code :
    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
     public String createExamen() {
            FacesContext context = FacesContext.getCurrentInstance();
            Examens wuser = getExamen();
            if (wuser == null) {
                wuser = new Examens();
                wuser.setDateEx(dateEx);
                wuser.setDescription(description);
                wuser.setIdPatient(idPatient);
                try {
                    utx.begin();
                    em.persist(wuser);
                    utx.commit();
                    return "validerExamen";
                } catch (Exception e) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                            "Erreur!",
                                                            "Contactez l'administrateur du système");
                    context.addMessage(null, message);
     
                    return null;
                }
            }else {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                        "Examen '"
     
                                                          + "' existe déjà! ","essayer de verifier les informations");
                context.addMessage(null, message);
                return null;
     
            }
          }
    Donc, après avoir entré les informations d'un nouveau examen et au clic sur le bouton ,j'obtiens le message suivant sur la page:"Erreur" ; ce qui correspond au message de "FacesMessage"; donc, l'ajout n'est pas effectué.
    je suis reconnaissant de vos aides.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par amnass Voir le message
    D'après l'exception trouvée, je comprends qu'il faut utiliser SelectItem au lieu de ArrayList, mais, je ne sais pas comment faire.
    svp, y a -t- des personnes que peuvent m'aider, je sais que ceci est très facile pour quelques personnes, mais, tous, nous devons commencer par des chose débutantes pour devenir un jour des experts.
    Merci d'avance.
    Tu dois retourner une List<SelectItem>. Créer un SelectItem se fait simplement en faisant un new SelectItem(Object valeur, String label)

  9. #9
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Salut,
    Tu dois retourner une List<SelectItem>. Créer un SelectItem se fait simplement en faisant un new SelectItem(Object valeur, String label)
    Merci pour ta contribution , pour "List<SelectItem>", disant, j'ai résolu le premier erreur, en fait, dans ma page jsp, j'obtiens les enregistrements dans un drop-drown List.
    Il me reste que la résolution de dernier erreur.

  10. #10
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Bonjour,
    je n'ai pas encore résolu mon problème, quelqu'un peut m'aider à résoudre le problème des clés étrangères, en fait, j'ai essayé de chercher au moins des exemples sur Internet, mais sans vain.
    je suis reconnaissant de quelqu'un qui accepte à m'aider.

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 13
    Points : 10
    Points
    10
    Par défaut merci
    merci bcp vous m'avais idéé à résoudre mon probleme qui est semblable au mien . je crois qu'au niveau de votre méthode il n y a pas de probleme . il vaut
    que définir un arraylist de type selectitem dans votre beans.
    merci

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/07/2012, 13h27
  2. [Core] Problème avec les clés étrangères
    Par leara500 dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/07/2012, 08h37
  3. Problème avec les clés étrangères
    Par PoichOU dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 06/11/2007, 09h46
  4. [EJB2.1 Entity] [CMP] [xdoclet] Problème avec les clés primaires
    Par shingo dans le forum Java EE
    Réponses: 1
    Dernier message: 10/02/2006, 16h41
  5. [CONCEPTION MCD] Problème avec les clés composées
    Par fabriceMerc dans le forum Schéma
    Réponses: 3
    Dernier message: 14/02/2005, 09h43

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