definition d'une action sur un composant JSF, en java, avec passage de paramètres.
Bonjour,
Je réalise un composant JSF personnalisé, qui doit afficher des liens (entre autres).
Ces liens fonctionnent lorsqu'ils sont décris, via des balises, dans ma page JSF; mais lorsque je veux construire des liens semblable en JAVA, ça bloque ! 8O
La partie qui me pose problème est l'appelle d'une méthode de mon managed bean lors d'un clic : si j'appelle une méthode sans argument en entrée, OK ça fonctionne !
Code:
1 2 3 4 5 6 7
|
linkOk = (HtmlCommandLink)context.getApplication().createComponent(HtmlCommandLink.COMPONENT_TYPE);
linkOk.setActionExpression(context.getApplication().getExpressionFactory().createMethodExpression(context.getELContext(), "#{monBean.maMethodeSansArg}", null, new Class[0]));
form = new HtmlForm();
this.getChildren().add(form);
form.getChildren().add(linkOk); |
Par contre si je veux lui passer des arguments... je sais pô faire :oops:
J'ai tenté comme ceci (en fait il y a un seul paramètre en entrée, de type String) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
linkKo = (HtmlCommandLink)context.getApplication().createComponent(HtmlCommandLink.COMPONENT_TYPE);
linkKo.setActionExpression(context.getApplication().getExpressionFactory().createMethodExpression(context.getELContext(), "#{monBean.maMethodeAvecArgString}", null, new Class[] {String.class}));
//Parametre
UIParameter parameter = (UIParameter)context.getApplication().createComponent(UIParameter.COMPONENT_TYPE);
parameter.setId("paramId");
parameter.setTransient(false);
parameter.setName("paramName");
parameter.setValue("laValeur");
linkKo.getChildren().add(parameter);
form = new HtmlForm();
this.getChildren().add(form);
form.getChildren().add(linkKo); |
J'obtiens un message d'erreur :
Citation:
java.lang.IllegalArgumentException: wrong number of arguments
Lors d'une autre tentative j'ai remplacé :
Code:
1 2
|
linkKo.setActionExpression(context.getApplication().getExpressionFactory().createMethodExpression(context.getELContext(), "#{monBean.maMethodeAvecArgString}", null, new Class[] {String.class})); |
par
Code:
1 2
|
linkKo.setActionExpression(context.getApplication().getExpressionFactory().createMethodExpression(context.getELContext(), "#{monBean.maMethodeAvecArgString}", null, new Class[1])); |
Mais j'obtiens l'erreur :
Citation:
javax.faces.el.MethodNotFoundException: java.lang.NullPointerException
Si quelqu'un peux m'aider ce serait vraiment coooooool !!