Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
543 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème de tag :o

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de tag :o

n°1841455
Alisteroid
Posté le 22-01-2009 à 10:58:42  profilanswer
 

Bonjour,
 
Je veux appeller dynamiquement une méthode sur un bean :
 
J'ai un string contenant le nom de mon bean et un autre contenant le nom de la methode
 

Code :
  1. String beanName = "bean.personne.physique.classement.Classement";
  2. String method = "getLibelle";


 
J'ai essayé avec :

Code :
  1. beanName.getClass().getMethod(method, null);
  2. columnContent = getResultat.invoke(beanName , null).toString();


 
J'obtiens : NoSuchMethodException
 
Une petite aide ?
(Je débute  :cry: )

Message cité 1 fois
Message édité par Alisteroid le 23-01-2009 à 12:06:13
mood
Publicité
Posté le 22-01-2009 à 10:58:42  profilanswer
 

n°1841503
Bidem
Posté le 22-01-2009 à 11:58:59  profilanswer
 

Alisteroid a écrit :


Code :
  1. beanName.getClass().getMethod(method, null);
 

J'obtiens : NoSuchMethodException

 

Une petite aide ?
(Je débute  :cry: )

 

Normal, là tu cherches une méthode "getLibelle" sur la classe String ...

 

Ce qu'il faut que tu utilise, c'est quelque chose comme ça :

Code :
  1. String beanName = "bean.personne.physique.classement.Classement";
  2. String methodName = "getLibelle";
  3. Class clazz = Class.forName(beanName);
  4. Method method = clazz.getMethod(methodName, (Class[]) null);
 

Edit PS :
Sinon, c'est quoi ton besoin parce que l'introspection, c'est pratique, ça permet de faire des trucs bien sioux mais ça a des inconvénients :
 - il faut savoir jongler avec le Méta modèle
 - ça complexifie la maintenance
 - il est évident que les perfs sont moindre que si tu appelle le code directement


Message édité par Bidem le 22-01-2009 à 12:03:27
n°1841513
Mithfindel
Mite fine d'ailes
Posté le 22-01-2009 à 12:08:09  profilanswer
 

Et sinon, pour les classes qui respectent le formalisme JavaBean, il y a Apache Commons BeanUtils (qui évite de réinventer la roue).

n°1841602
Alisteroid
Posté le 22-01-2009 à 14:11:20  profilanswer
 

Merci pour tes réponses,
 
En fait j'en chie pour mes tablib, j'arrive facilement à récupérer la valeur d'un de mes attributs :
 
<liste:column method="getIntitule">
     <liste:entete name="Intitulé"/>
</liste:column>  
 
La j'applique la méthode getIntitulé sur mon bean pour récuperer l'intitulé.
 
Mais si mon attribut est lui même un objet, je ne vois pas comment appeller cette methode sur cet attribut et non pas sur le bean, la méthode crade que j'ai trouvé pour l'instant c'est dans le bean par ex:
 
public String getConventionLibelle() {
 return convention.getLibelle();
}
 
du coup la méthode est redondante :/  
 
Bref je sais que j'explique pas très bien mais vous comprenez surement ou je veux en venir :D

n°1841951
Alisteroid
Posté le 23-01-2009 à 12:03:30  profilanswer
 

Bon y a pas des tag standard ou je ne sais quoi pour faire un truc du genre :

 

<liste:column method="monattribut.getIntitule">
     <liste:entete name="Intitulé"/>
</liste:column>

 

Pour que la méthode soit appellée sur l'attribut de mon bean au lieu de l'appeller sur le bean directement?
Comment est parsé le tag dans ce cas la?
Le problème est que j'utilise unqiuement des tags perso dévellopés par un mec qui est pas la :/ et je suis completement bloqué, je trouve toujours pas de solution.

 

Lui il récupère la valeur en faisant :

 

getResultat = bean.getClass().getMethod(column.method, null);
columnContent = resultat.invoke(bean, null).toString();

 

Moi je veux pouvoir faire la même chose mais sur un attribut de mon bean que je donnerai dans le tag.


Message édité par Alisteroid le 23-01-2009 à 12:04:59
n°1842004
Alisteroid
Posté le 23-01-2009 à 13:53:00  profilanswer
 

:heink:  Y a des gens qui ont déja fait du java ici  :heink:

n°1842386
zapan666
Tout est relatif
Posté le 24-01-2009 à 02:47:18  profilanswer
 

Mithfindel a écrit :

Et sinon, pour les classes qui respectent le formalisme JavaBean, il y a Apache Commons BeanUtils (qui évite de réinventer la roue).

 
Alisteroid a écrit :

:heink:  Y a des gens qui ont déja fait du java ici  :heink:


BeanUtils répond a ton besoin

 

(surtout ça je pense)

 
Code :
  1. <montab monobjet="${monObject}" titre="truc.bidule.machin"/>
 
Code :
  1. String output = (String) PropertyUtils.getProperty(monobjet,titre);


Avec un petit peu de chance, ça marche.

 


Message édité par zapan666 le 24-01-2009 à 02:47:28

---------------
my flick r - Just Tab it !
n°1843279
Alisteroid
Posté le 26-01-2009 à 17:21:41  profilanswer
 

Merci beaucoup,

 

J'ai testé des heures , en vain

 
Code :
  1. Tarif tarif = (Tarif) service.getById(new Integer(1));
  2. String a = (String) PropertyUtils.getNestedProperty(tarif.getClass(),"id" );
 
Code :
  1. // Table TANNEE_ADHESION
  2. public class Tarif extends BaseBean {
  3. // TAF_IID - identifiant unique du tarif
  4. private Integer id;
  5. // TFOR_IID - identifiant de la formule associée
  6. private Formule formule;
  7. // MIL_SISPORT - millésime licence - référence vers TREF_MILLESIME
  8. private Millesime millesime;
  9. // ANA_IID - Année d'adhésion
  10. private AnneeAdhesion anneeAdhesion;
  11. // TAF_DMONT - montant de la formule
  12. private double montant;
  13. // TAF_DDEBUT_VALID - début de validité de la formule
  14. private FFTDate debut;
  15. // TAF_DFIN_VALID - fin de validité de la formule
  16. private FFTDate fin;
  17. // TAF_BVENTE - Millesime de la formule en vente
  18. private Boolean enVente;
  19. // TAF_BATTRIBUTION - le tarif a t il été déjà attribué
  20. private Boolean dejaAttribue;
  21. public FFTDate getDebut() {
  22.  return debut;
  23. }
  24. public AnneeAdhesion getAnneeAdhesion() {
  25.  return anneeAdhesion;
  26. }
  27. public void setAnneeAdhesion(AnneeAdhesion anneeAdhesion) {
  28.  this.anneeAdhesion = anneeAdhesion;
  29. }
  30. public void setDebut(FFTDate debut) {
  31.  this.debut = debut;
  32. }
  33. public FFTDate getFin() {
  34.  return fin;
  35. }
  36. public void setFin(FFTDate fin) {
  37.  this.fin = fin;
  38. }
  39. public Formule getFormule() {
  40.  return formule;
  41. }
  42. public void setFormule(Formule formule) {
  43.  this.formule = formule;
  44. }
  45. public Integer getId() {
  46.  return id;
  47. }
  48. public void setId(Integer id) {
  49.  this.id = id;
  50. }
  51. public Millesime getMillesime() {
  52.  return millesime;
  53. }
  54. public void setMillesime(Millesime millesime) {
  55.  this.millesime = millesime;
  56. }
  57. public double getMontant() {
  58.  return montant;
  59. }
  60. public void setMontant(double montant) {
  61.  this.montant = montant;
  62. }
  63. public Boolean getDejaAttribue() {
  64.  return dejaAttribue;
  65. }
  66. public void setDejaAttribue(Boolean dejaAttribue) {
  67.  this.dejaAttribue = dejaAttribue;
  68. }
  69. public Boolean getEnVente() {
  70.  return enVente;
  71. }
  72. public void setEnVente(Boolean enVente) {
  73.  this.enVente = enVente;
  74. }
  75. }
 

Et je me tape à chaque fois : java.lang.NoSuchMethodException: Unknown property 'id'

Message cité 1 fois
Message édité par Alisteroid le 26-01-2009 à 17:21:53
n°1843286
zapan666
Tout est relatif
Posté le 26-01-2009 à 17:37:11  profilanswer
 

Alisteroid a écrit :

Merci beaucoup,
 
J'ai testé des heures , en vain
 

Code :
  1. Tarif tarif = (Tarif) service.getById(new Integer(1));
  2. String a = (String) PropertyUtils.getNestedProperty(tarif.getClass(),"id" );


 
Et je me tape à chaque fois : java.lang.NoSuchMethodException: Unknown property 'id'


Sur la class Tarif, il ne doit pas y avoir de getId(), par contre, sur l'objet tarif, il y a plus de chance qu'il y ait un getId()
 
 

Code :
  1. Tarif tarif = (Tarif) service.getById(new Integer(1));
  2. String a = (String) PropertyUtils.getNestedProperty(tarif,"id" );


ça devrait (en théorie) marcher.
 


---------------
my flick r - Just Tab it !
n°1843288
Alisteroid
Posté le 26-01-2009 à 17:41:34  profilanswer
 

Non je me tape une java.lang.ClassCastException :/

mood
Publicité
Posté le 26-01-2009 à 17:41:34  profilanswer
 

n°1843295
zapan666
Tout est relatif
Posté le 26-01-2009 à 17:55:15  profilanswer
 

Alisteroid a écrit :

Non je me tape une java.lang.ClassCastException :/


Parce que tu cast un Integer en String (normalement, ça doit se voir dans la stacktrace)

 
Code :
  1. Tarif tarif = (Tarif) service.getById(new Integer(1));
  2. Integer a = (Integer) PropertyUtils.getNestedProperty(tarif,"id" );


Message édité par zapan666 le 26-01-2009 à 17:55:40

---------------
my flick r - Just Tab it !
n°1843390
Alisteroid
Posté le 26-01-2009 à 21:34:07  profilanswer
 

Et moi je prends ton exemple comme un gros débile en castant en string aussi

n°1843392
zapan666
Tout est relatif
Posté le 26-01-2009 à 21:41:56  profilanswer
 

Alisteroid a écrit :

Et moi je prends ton exemple comme un gros débile en castant en string aussi


 [:cosmoschtroumpf] C'était pour voir si tu suivais


---------------
my flick r - Just Tab it !
n°1843394
Alisteroid
Posté le 26-01-2009 à 21:45:19  profilanswer
 

[:ddr555]  
Faut dire que ça fait 2 semaines que je me mets au java après 3 ans de php donc je suis excusé  [:thalis]

n°1843514
Alisteroid
Posté le 27-01-2009 à 10:52:57  profilanswer
 

Ca marche \o/ merci beaucoup j'ai réussi à corriger tout mon code, ça marche impec ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème de tag :o

 

Sujets relatifs
[RESOLU] [VBS] Probleme script vbsProblème de compatibilité javascript/IE
Probleme avec mon fichier batchProblème lien
[Résolu] - [SQL] probleme de requetageHelp me : problème de date/heure du moment en php
afficher une image probleme[Java] Problème de lecture dans un fichier
Problème avec Joomlaunset pose problème
Plus de sujets relatifs à : Problème de tag :o


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR