Construction d'un menu dynamique - problème setActionExpression
Bonjour,
Je sais que ce genre de question a probablement été déjà posé maintes fois, mais je n'arrive pas à créer un menu dynamique qui utilise une methode avec en paramètre un ActionEvent.
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| //Ma méthode "type" action listener
public void changeApplicationLanguage(ActionEvent e){...}
//La génération de mon menu
private void initMenuLanguage() {
languageMenu = new HtmlMenuGroup();
languageMenu.setValue("Langue...");
Class<?>[] parameterList = new Class<?>[]{ActionEvent.class};
MethodExpression me = FacesContext.getCurrentInstance().getApplication().getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{applicationFace.changeApplicationLanguage}", null, parameterList);
HtmlMenuItem item;
for (Language language:languageManager.getAllLanguages()) {
item = new HtmlMenuItem();
item.setId(language.getIsoCode());
item.setSubmitMode("server");
item.setValue(language.getName());
item.setActionExpression(me);
getLanguageMenu().getChildren().add(item);
}
} |
Lorsque je sélectionne une langue dans mon menu, j'ai l'exception suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| java.lang.IllegalArgumentException: wrong number of arguments
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.apache.el.parser.AstValue.invoke(AstValue.java:131)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:387)
org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:317)
org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:292)
org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:249)
org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:462)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493) |
Une idée de ce qui ne fonctionne pas?