A noter :
1) qu'il faut définir le type de paramètres avec le type primitif :
Class[] params = { boolean.class };
2) Puis, lors de lm'appel il faut passer un tableau d'objet pour l'appel à invoke() ... Donc, on passe un tableau de Boolean (ou Integer, etc ...):
Object [] params = {new Boolean(true)};
...
remplirBean(beanARemplir, nomDuChamp, params);
et voilou, c'est magique ...
public static void main(String[] args)
{
Object [] params = {new Boolean(true)};
PtuResultatsBoutonBean beanARemplir = new PtuResultatsBoutonBean();
String nomDuChamp = "repTraitementEnabled";
remplirBean(beanARemplir, nomDuChamp, params);
System.out.println(beanARemplir);
}
private static void remplirBean(PtuResultatsBoutonBean beanARemplir, String nomDuChamp, Object [] valeur) {
Class cl = beanARemplir.getClass();
Class[] params = { boolean.class };
// pour chacune des methodes
String nomSetterAttendu = "set" + nomDuChamp.substring(0, 1).toUpperCase() + nomDuChamp.substring(1, nomDuChamp.length());
// msg erreur
String msg = null;
try {
Method method = cl.getMethod(nomSetterAttendu, params);
// on a trouve le setter et on verifie qu'il est public, que son nom commence par set, et qu'il prend un parametre
if (method != null && Modifier.isPublic(method.getModifiers()) && method.getName().matches("(set[A-Z0-9]+[a-zA-Z0-9]*)")
&& method.getParameterTypes().length == 1) {
method.invoke(beanARemplir, valeur);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
Aucun commentaire:
Enregistrer un commentaire