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

JPA Java Discussion :

Champ transient qui ne s'affiche pas


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 55
    Par défaut Champ transient qui ne s'affiche pas
    Bonjour à tous !

    je suis sur un projet d'application web java et j'ai opté pour JPA pour la persistance des données.
    Malheureusement j'ai un souci pour afficher un champ annoté avec @transient (pour qu’il soit ignoré lors de la persistance de l'entité) dans mon dataTable.
    En fait la colonne correspondante est vide si le champ est annoté avec @transient et sans annotation elle est bien remplie !
    je cherche le pourquoi mais j'arrive toujours pas à comprendre.

  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
    si le champ est vide c'est que tu ne lui a pas donné de valeur après avoir chargé tes données. Aussi, si tu récupère tes données à travers un ejb, les champs transient peuvent devenir vide lors du transfert des object de et vers l'EJB.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 55
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    si le champ est vide c'est que tu ne lui a pas donné de valeur après avoir chargé tes données. Aussi, si tu récupère tes données à travers un ejb, les champs transient peuvent devenir vide lors du transfert des object de et vers l'EJB.
    merci tchize pour votre réponse; mais je ne comprends pas quand vous dites 'donné de la valeur après avoir chargé tes données' comment s'y prendre concrètement ?

  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
    un champ transient n'est ni sérialisé, ni stocké dans la base de données. Donc sa valeur est vide si tu ne met pas explicitement une valeur dedans après l'avoir récupéré de la base de données. donc la question est comment tu remplis cette donnée avant d'envoyer tes objets vers ta dataTable?

  5. #5
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 55
    Par défaut
    OK , je vois
    en fait ce que j'ai fait c'est ça

    mon dataTable est alimenté par ma liste suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public List<Fournisseurs> getListFournisseurs() {
     
            List<Fournisseurs> listFrs =  em.createNamedQuery("getAllFournisseurs", Fournisseurs.class).getResultList();
     
            return listFrs;
        }
    et la colonne concernée est renseignée comme telle



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <p:dataTable value="#{fournisseursFacade.listFournisseurs}" var="item"....
     
    <p:column style="width: 20%" filterBy="#{item.intitule}">
                                <f:facet name="header">
                                    <h:outputText value="Spécialité"/>
                                </f:facet>
     
                                <h:outputText value="#{item.intitule}"/>
                         </p:column>
    Avec l'annotation @transient sur le champ "intitule" la colonne est vide !

    je précise que le champ "intitule" n'existe pas dans ma table "fournisseur" mais provient de la jointure avec une autre table "specialité" , je l'ai juste ajouté à mon bean entité en plus des champs correspondants
    aux colonnes de ma table. Est - ce même possible d'ajouter un champ qui ne figure pas dans la table ?

  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
    tu peux créer des propriété dérivées oui. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Fournisseur{
    //....
     
       @Transient
       public String getIntitule(){
          return getSpecialite().getTitre();
       }
    }
    par contre en l'occurence on ne vois pas trop dans ce cas présent l'intérêt d'aller encombrer ton bean avec des propriété qui viennent d'un autre bean alors que jsf est capable d'aller chercher tout ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <p:dataTable value="#{fournisseursFacade.listFournisseurs}" var="item"....
     
    <p:column style="width: 20%" filterBy="#{item.intitule}">
                                <f:facet name="header">
                                    <h:outputText value="Spécialité"/>
                                </f:facet>
     
                                <h:outputText value="#{item.specialite.titre}"/>
                         </p:column>

Discussions similaires

  1. [XL-2013] Power Pivot : Total champs calculés qui ne s'affichent pas.
    Par Mathsdeb dans le forum Excel
    Réponses: 0
    Dernier message: 31/05/2016, 20h40
  2. champ auto d'interbase qui ne s'affiche pas
    Par ally dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/04/2007, 21h03
  3. Champ auto qui ne s'affiche pas
    Par codial dans le forum Connexion aux bases de données
    Réponses: 19
    Dernier message: 27/11/2006, 18h26
  4. Champs qui ne s'affichent pas dans formulaire
    Par capitaine dans le forum Access
    Réponses: 1
    Dernier message: 02/06/2006, 16h00
  5. Réponses: 5
    Dernier message: 23/01/2006, 13h31

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