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 d'affichage dans JSF pour une clé étrangère dans JPA


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut Problème d'affichage dans JSF pour une clé étrangère dans JPA
    Bonjour
    Je travail avec JPA, EJB3, JSF, sous NetBeans et Oracle
    Énoncé :
    j'ai deux tables sur la BDD (Navire & TypeNavire) la clé primaire du TypeNavire (codeTypeNav) figure comme clé étrangère dans la table Navire;
    et par conséquence dans l'Entity Class Navire, le champ codeTypeNav est déclaré de Type TypeNavire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @JoinColumn(name = "CODE_TYPENAV", referencedColumnName = "CODE_TYPENAV")
        @ManyToOne
        private TypeNavire codeTypenav;
    et pas comme String comme il l'est dans l'Entity mère TypeNavire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        @Id
        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 6)
        @Column(name = "CODE_TYPENAV")
        private String codeTypenav;
    Problème :
    et quand je veux affiché par exemple dans un tableau en JSF, des Navires comme suit :
    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
     
                   <p:dataTable  value="#{jSFBean.listNavire}" var="listNav">
     
                        <p:column>
                            <f:facet name="header">                            
                                <h:outputText value="Code Navire"/>                            
                            </f:facet> 
                            <h:outputText  value="#{listNav.codeNavire}" />
                        </p:column>                    
     
                        <p:column>
                            <f:facet name="header">
     
                                <h:outputText value="Code Type Navire"/>
                            </f:facet> 
                            <h:outputText value="#{listNav.codeTypenav}"/>
                        </p:column>
     
                 </p:dataTable>
    il n'y a aucune erreur qui s'affiche, et le tableau est plein, mais la colonne du CodeTypeNav est vide!!!
    aidez moi svp
    JE VOUS REMERCIE D'AVANCE
    MERCI

  2. #2
    Membre régulier
    Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 78
    Points
    78
    Par défaut
    bonjour,

    je ne maitrise pas JSF mais cette ligne me parais suspecte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{listNav.codeTypenav}"/>
    le listNav.codeTypenav est l'objet TypeNavire et pas le code. je te propose d'essayer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{listNav.codeTypenav.codeTypenav}"/>
    Si ça ne marchera pas essaye de vérifier déjà que codeTypenav n'est pas null avant d'arriver à la couche JSF.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par chortani Voir le message
    bonjour,

    je ne maitrise pas JSF mais cette ligne me parais suspecte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{listNav.codeTypenav}"/>
    le listNav.codeTypenav est l'objet TypeNavire et pas le code. je te propose d'essayer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{listNav.codeTypenav.codeTypenav}"/>
    Si ça ne marchera pas essaye de vérifier déjà que codeTypenav n'est pas null avant d'arriver à la couche JSF.
    Bonjour
    j'ai fait ce que vous m'avez conseillé, et le problème persiste, c'est à dire que la colonne codeTypeNav est vide,
    alors que codeTypeNav est null mais je ne comprend pas pourquoi!!! car j'ai utilisé la requête directement sur Oracle, est ça marche il m'affiche le résultat au complet!
    merci de bien vouloir m'aider.

  4. #4
    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
    Sans aller jusque jsf, dans tes test unitaires, est-ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jSFBean.getListeNavire().get(0).getCodeTypenav().getCodeTypenav()
    retourne quelque chose?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Sans aller jusque jsf, dans tes test unitaires, est-ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jSFBean.getListeNavire().get(0).getCodeTypenav().getCodeTypenav()
    retourne quelque chose?
    Merci Mr
    j'ai fait ce que vous avez demandé, mais ne retourne rien, il y a une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.NullPointerException
    et quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system.out.println("codeTypeNav de la table Navire : "+listNav.get(0).getCodeTypeNav());
    listNav est la liste issu de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Query req=em.createNativeQuery("SELECT * FROM schema1.NAVIRE a WHERE CODE_NAVIRE not in( SELECT CODE_NAVIRE FROM schema2.NAVIRE2 m ) ", Navire.class);       
            List<Navire> listNavire = (List<Navire>)req.getResultList();
    et si vous vous souvenez bien c'est bien VOUS qui me l'avez donné
    bref
    listNav.get(0).getCodeTypeNav()
    il affiche null [codeTypeNav de la table Navire : null] (sans erreur)
    MERCI de m'aider

  6. #6
    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
    Ben a priori, c'est que tes navires dans ta table n'ont pas de CODE_NAVIRE associé . Du coup JPA fait son boulot, il met un null

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ben a priori, c'est que tes navires dans ta table n'ont pas de CODE_NAVIRE associé . Du coup JPA fait son boulot, il met un null
    Ben Mr je n'ai pas vraiment saisi ce que vous m'avez dit, mais il faut que vous sachiez que si j’exécute la même requête dans Oracle, le résultat est complet, et il y a aucun problème.
    SVP aidez moi Mr je suis vraiment coincé
    MERCI D'AVANCE

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 153
    Points : 105
    Points
    105
    Par défaut
    le problème c'est ta requête. tu utilise exécute une nativeQuery et tu veux exploiter le résultat via JPA. tu devrai plutôt reconstruire ton objet en parcourant le résultat de ta requête avec Iterate.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Iterate req=em.createNativeQuery("SELECT * FROM schema1.NAVIRE a WHERE CODE_NAVIRE not in( SELECT CODE_NAVIRE FROM schema2.NAVIRE2 m ).getResultList.iterator();
    List<Navire> listNavire = new ArrayList<>();
    while(req.hasNext()){
       Object[] tresult=req.next();
        String codeNavire=(String)tresult[0];
         .....
         .....
        String codeTypeNavire=(String)tresult[i];
        Navire nav=new Navire(codeNavire);
        nav.setCodeTypeNavire(codeTypeNavire)
        listNavire.add(nav)
    }
    adapte le code à ton cas et ça devrai marcher!
    ou tu exécute ta requête en JPA plus simplement comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       Query req=em.createQuery("SELECT a FROM schema1.NAVIRE a WHERE a.CODE_NAVIRE not in( SELECT m.CODE_NAVIRE FROM schema2.NAVIRE2 m ) ", Navire.class);       
            List<Navire> listNavire = (List<Navire>)req.getResultList();

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par mysianne Voir le message
    le problème c'est ta requête. tu utilise exécute une nativeQuery et tu veux exploiter le résultat via JPA. tu devrai plutôt reconstruire ton objet en parcourant le résultat de ta requête avec Iterate.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Iterate req=em.createNativeQuery("SELECT * FROM schema1.NAVIRE a WHERE CODE_NAVIRE not in( SELECT CODE_NAVIRE FROM schema2.NAVIRE2 m ).getResultList.iterator();
    List<Navire> listNavire = new ArrayList<>();
    while(req.hasNext()){
       Object[] tresult=req.next();
        String codeNavire=(String)tresult[0];
         .....
         .....
        String codeTypeNavire=(String)tresult[i];
        Navire nav=new Navire(codeNavire);
        nav.setCodeTypeNavire(codeTypeNavire)
        listNavire.add(nav)
    }
    adapte le code à ton cas et ça devrai marcher!
    ou tu exécute ta requête en JPA plus simplement comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       Query req=em.createQuery("SELECT a FROM schema1.NAVIRE a WHERE a.CODE_NAVIRE not in( SELECT m.CODE_NAVIRE FROM schema2.NAVIRE2 m ) ", Navire.class);       
            List<Navire> listNavire = (List<Navire>)req.getResultList();
    Merci
    mais j'ai essayé ce que vous proposez pour la première je ne l'ai pas trop comprise, qui plus est l'Objet Iterate n'existe pas!!
    mais la deuxième proposition m'a beaucoup plu, sauf que le problème persiste encore, c'est à dire que la colonne codeTypeNav de la table Navire est toujours vide, (j'ai testé listNav.get(0).getTypeNav() le résultat est null)
    pour résumé il récupère tout sauf le codeTypeNav
    j'ai remarqué une chose:
    c'est que dans l'entity Class il ya un findAll, findByCodeNav, findByNom, ......
    mais il y pas de findByCodeTypeNav !!!!! c'est bizarre !!!
    SVP AIDEZ MOI

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 153
    Points : 105
    Points
    105
    Par défaut
    qui plus est l'Objet Iterate n'existe pas!!
    domage!! c'est plutôt Iterator
    mais la deuxième proposition m'a beaucoup plu, sauf que le problème persiste encore
    la seconde requête interroge deux schémas. je crois que c'est de là que peut provenir ton problème
    est-ce que tu a des entity pour chaque schéma?
    mais de toute les façon, la première requête en NativeQuery devrait marcher. remplace juste Iterate par Iterator<Navire>.
    pour l'interrogation de plusieurs schémas, je jette un coup d'oeil et te tiens au courant. à+

  11. #11
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut meme problem aidezr moii
    Citation Envoyé par gerxwcv Voir le message
    Bonjour
    Je travail avec JPA, EJB3, JSF, sous NetBeans et Oracle
    Énoncé :
    j'ai deux tables sur la BDD (Navire & TypeNavire) la clé primaire du TypeNavire (codeTypeNav) figure comme clé étrangère dans la table Navire;
    et par conséquence dans l'Entity Class Navire, le champ codeTypeNav est déclaré de Type TypeNavire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @JoinColumn(name = "CODE_TYPENAV", referencedColumnName = "CODE_TYPENAV")
        @ManyToOne
        private TypeNavire codeTypenav;
    et pas comme String comme il l'est dans l'Entity mère TypeNavire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        @Id
        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 6)
        @Column(name = "CODE_TYPENAV")
        private String codeTypenav;
    Problème :
    et quand je veux affiché par exemple dans un tableau en JSF, des Navires comme suit :
    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
     
                   <p:dataTable  value="#{jSFBean.listNavire}" var="listNav">
     
                        <p:column>
                            <f:facet name="header">                            
                                <h:outputText value="Code Navire"/>                            
                            </f:facet> 
                            <h:outputText  value="#{listNav.codeNavire}" />
                        </p:column>                    
     
                        <p:column>
                            <f:facet name="header">
     
                                <h:outputText value="Code Type Navire"/>
                            </f:facet> 
                            <h:outputText value="#{listNav.codeTypenav}"/>
                        </p:column>
     
                 </p:dataTable>
    il n'y a aucune erreur qui s'affiche, et le tableau est plein, mais la colonne du CodeTypeNav est vide!!!
    aidez moi svp
    JE VOUS REMERCIE D'AVANCE
    MERCI

Discussions similaires

  1. [AC-2007] Problème d'affichage de résultat d'une requete dans champs de texte
    Par Bubulle232 dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/01/2012, 19h12
  2. Réponses: 0
    Dernier message: 13/12/2010, 09h34
  3. Réponses: 1
    Dernier message: 25/07/2007, 09h21
  4. Réponses: 2
    Dernier message: 22/05/2007, 16h15
  5. Réponses: 2
    Dernier message: 07/09/2006, 17h05

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