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 :

Setter dynamiquement un JavaBean


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 44
    Par défaut Setter dynamiquement un JavaBean
    Bonjour,
    Est t'il possible de pouvoir setter un javaBean d'une manière générique?
    Càd :
    Je passe à une méthode par ex setDynamParameter, les paramètres suivant :
    "exoObjectX" qui est l'objet à setter
    "sNameAttribute" qui est le nom de l'attribut à setter
    et la valeur que l'attribut "sNameAttribute" doit prendre.
    Ex
    setDynamParameter(oObjectX, sNameAttribute, sValue){

    Et ici on set le sNameAttribute du Bean oObjectX avec la valeur sValue

    }

    Voilà j'espère que j'ai été claire :/
    Merci d'avance
    Kcintim

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    lors la réflexivité n'existant (quasiment) pas en Java, A priori le plus propre serait d'ajouter une méthode dans la classe de "exoObjectX" du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void setAttributeByName(String attribute, "?" value){
       if(attribute.equals("attribut1")){
          setAttribut1(value);
       } 
       else if{ ... }
    }
    Maintenant si le fait de setter ces attributs se fait à partir d'une classe très spécifique, une méthode du genre de celle décrite au dessus peut être écrite directement dans la méthode appelante.


    En fonction de ton archi, tu peux aussi vouloir ajouter une Map dans ta classe pour accéder aux values de tes attributs par leur nom.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Vakhyw Voir le message
    ... la réflexivité n'existant (quasiment) pas en Java...
    La blague !

    Évidemment que la réflexivité existe, je te conseille de lire ceci pour commencer.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 44
    Par défaut
    Merci j'ai trouvé

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    De rien, n'oublie pas le tag "résolu" alors.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kcintim Voir le message
    Merci j'ai trouvé
    Dans le principe du forum, il serait bon de montrer ce que tu as fait pour que d'autres puissent en profiter
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 44
    Par défaut Setter dynamiquement un JavaBean
    Voici la solution,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Object setParameterOfObject(Object oObject, String sParameter, String sValue) throws Exception{
     
    try{
    Field field = oObject.getClass().getDeclaredField(sParameter);
    field.setAccessible(true);
    field.set(oObject, svalue.tostring());
    }
    catch(NoSuchFieldException e){
    }
    System.out.println(e.getMessage());
    }
    return oObject;

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par Kcintim Voir le message
    Bonjour,
    Est t'il possible de pouvoir setter un javaBean d'une manière générique?
    Càd :
    Je passe à une méthode par ex setDynamParameter, les paramètres suivant :
    "exoObjectX" qui est l'objet à setter
    "sNameAttribute" qui est le nom de l'attribut à setter
    et la valeur que l'attribut "sNameAttribute" doit prendre.
    Ex
    setDynamParameter(oObjectX, sNameAttribute, sValue){

    Et ici on set le sNameAttribute du Bean oObjectX avec la valeur sValue

    }

    Voilà j'espère que j'ai été claire :/
    Merci d'avance
    Kcintim
    Youuuuuuuuuuuuh chelou ton besoin là. La question techniquement posée comme tu l'as fait me parait pas faisable, mais si tu tiens à setter un attribut de nom dynamique, je peux te conseiller sur ton javabean de déifnir un attribut HashMap dont les clés seraient des champs texts, et donc ta méthode setDynamic ferait simplement une affectation du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjetDynamic.tabHashMap.set(tonChamp,saValeur)
    @Vakhyw : Pas terrible les if comme tu proposes, le jour où il va supprimer ou rajouter un atrribut, c'est un if à supprimer/rajouter c'est ca

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    J'ai également proposé une Map.

    Tu auras toujours le problème de rajouter/supprimer une ligne quelque part si tu veux pouvoir verrouiller les attributs possibles. Sinon ça reviendrait à avoir de la reflexivité sur les attributs ...

  10. #10
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par Vakhyw Voir le message
    J'ai également proposé une Map.

    Tu auras toujours le problème de rajouter/supprimer une ligne quelque part si tu veux pouvoir verrouiller les attributs possibles. Sinon ça reviendrait à avoir de la reflexivité sur les attributs ...
    Avec une Map tu t'en fous bien des noms de champs à modifier, la suppression d'une ligne dans ta map se ferait aussi dynamiqueement (remove).
    Désolé j'avais pas entierement lu ta proposition de Map, c'est effectivement du bon sens.

  11. #11
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Et donc dans ton cas si tu veux une gestion entièrement dynamique, il te faut une Map<ObjectX, Map<String, Object>> : A chaque ObjectX est associé une Map d'attributs. Mais c'est clairement assez crado surtout pour le typage et aussi parce que tu n'as que peu de verrous...

    En fait c'est quoi la problématique ? Je suis persuadé qu'il y a bon petit design pattern qui pourra résoudre proprement ton problème moyennant une adaptation de ton archi

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

Discussions similaires

  1. Creation de fiche dynamique
    Par Mouss26 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/07/2002, 07h56
  2. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 11h50
  3. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36
  4. Réponses: 4
    Dernier message: 13/05/2002, 16h43
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 16h19

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