Problème de tag :o

Problème de tag :o - Java - Programmation

Marsh Posté le 22-01-2009 à 10:58:42    

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
Reply

Marsh Posté le 22-01-2009 à 10:58:42   

Reply

Marsh Posté le 22-01-2009 à 11:58:59    

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
Reply

Marsh Posté le 22-01-2009 à 12:08:09    

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

Reply

Marsh Posté le 22-01-2009 à 14:11:20    

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

Reply

Marsh Posté le 23-01-2009 à 12:03:30    

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
Reply

Marsh Posté le 23-01-2009 à 13:53:00    

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

Reply

Marsh Posté le 24-01-2009 à 02:47:18    

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 !
Reply

Marsh Posté le 26-01-2009 à 17:21:41    

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
Reply

Marsh Posté le 26-01-2009 à 17:37:11    

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 !
Reply

Marsh Posté le 26-01-2009 à 17:41:34    

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

Reply

Marsh Posté le 26-01-2009 à 17:41:34   

Reply

Marsh Posté le 26-01-2009 à 17:55:15    

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 !
Reply

Marsh Posté le 26-01-2009 à 21:34:07    

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

Reply

Marsh Posté le 26-01-2009 à 21:41:56    

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 !
Reply

Marsh Posté le 26-01-2009 à 21:45:19    

[: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]

Reply

Marsh Posté le 27-01-2009 à 10:52:57    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed