Bonjour à tous,
Dans une liste déroulante (selectOneMenu), je souhaiterais lancer une action à chaque sélection. JSF propose-t-il un procédé pour arriver à ce résultat? Ou faut-il passer par du javascript ?
Merci d'avance
Bonjour à tous,
Dans une liste déroulante (selectOneMenu), je souhaiterais lancer une action à chaque sélection. JSF propose-t-il un procédé pour arriver à ce résultat? Ou faut-il passer par du javascript ?
Merci d'avance
C quoi ton framework de presentation ? RichFaces Ou PrimesFaces etc??? c'est pas du ressort de JSF ta question.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
Si tu souhaites exécuter une action (Java j'imagine) à chaque sélection, tu devras le faire en Ajax (ou alors en soumettant de force le formulaire, mais c'est un peu plus bourrin).
Richfaces te le permet avec par exemple le composant <a4j:support>...
Nous sommes tous semblables, alors acceptons nos différences !
--------------------------------------------------------------
Liens : Blog | Page DVP | Twitter
Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
Critiques : Apache Maven
J'utilise JSF standard (sans framework présentation complémentaire). J'ai fait des recherches sur le net et rien trouvé, ta réponse (romaintaz) ne me surprend donc pas, je voulais une confirmation. Je vais donc bidouiller avec javascript pour récupérer un bouton invisible et lui appliquer un click.
Merci à tous les deux
Ce n'est pas la peine. Tu peux faire ceci :
En gros, au onchange, tu soumets le formulaire. Ensuite, tu mets le code que tu voulais exécuter dans ton monBean.monAction...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <h:selectOneMenu ... onchange="this.form.submit();" valueChangeListener="#{monBean.monAction}"> ...
Nous sommes tous semblables, alors acceptons nos différences !
--------------------------------------------------------------
Liens : Blog | Page DVP | Twitter
Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
Critiques : Apache Maven
J'avais déjà essayé ça :
Je rentrais bien dans la méthode monAction mais son contenu (appel à une autre méthode) levait l'exception : AbortProcessingException. Ne comprenant pas j'ai fait machine arrière. Tu saurais d'où pourrait venir cette erreur?
Code : Sélectionner tout - Visualiser dans une fenêtre à part <h:selectOneMenu ... onchange="submit()" valueChangeListener="#{monBean.monAction}">
Salut,
T'as que AbortProcessingException ?
T'as pas un message indiquant pourquoi le traitement s'est arrêté ?
Fais nous voir le code ou l'exception est levée et montre nous la pile de l'exception .
Ils flottent tous en bas
Le composant :
Méthode dans le bean :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <h:selectOneMenu value="#{bean.schedule.id}" onchange="submit()" valueChangeListener="#{bean.updateValue}"> <f:selectItems value="#{bean.list}"/> </h:selectOneMenu>
Et l'erreur levée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void updateValue(ValueChangeEvent valueChangeEvent) { System.out.println(" --- updateValue --- "); deduceInformation(); }
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 09:14:13,390 INFO [STDOUT] --- updateValue --- 09:14:13,390 SEVERE [faces] AbortProcessingException thrown when processing event of type 'javax.faces.event.ValueChangeEvent' during phase 'PROCESS_VALIDATIONS 3' for component with ID or Client ID of 'j_id_jsp_1091133475_168' 09:14:13,390 SEVERE [faces] javax.faces.event.AbortProcessingException: /declaration/form/HeaderForm.jsp(61,24) '#{bean.updateValue}' java.lang.NullPointerException javax.faces.event.AbortProcessingException: /declaration/form/HeaderForm.jsp(61,24) '#{bean.updateValue}' java.lang.NullPointerException at javax.faces.event.MethodExpressionValueChangeListener.processValueChange(MethodExpressionValueChangeListener.java:93) at javax.faces.event.ValueChangeEvent.processListener(ValueChangeEvent.java:134) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:771) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:444) at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:701) at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.NullPointerException at fr.mgi.mcustomsweb.ics.managedbean.beanController.deduceInformation(beanController.java:492) at fr.mgi.mcustomsweb.ics.managedbean.beanController.updateValue(beanController.java:658) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.el.parser.AstValue.invoke(AstValue.java:170) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68) at javax.faces.event.MethodExpressionValueChangeListener.processValueChange(MethodExpressionValueChangeListener.java:91) ... 29 more
Salut,
Ce n'est pas updateValue() qui pose directement problème.
Ton exception nullPointerException est levée ici :
En clair, à la ligne 492 de ta classe BeanController, la méthode deduceInformation() a une instruction ou un objet null est sollicité pour un traitement (méthode, cast etc...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part fr.mgi.mcustomsweb.ics.managedbean.beanController.deduceInformation(beanController.java:492)
C'est à la ligne 492 (du code de l'époque en tout cas)que tu dois regarder.
Ils flottent tous en bas
vérifie l'objet qui est null dans la fonction, peu être un objet pas initialisé.
Articles: Richfaces - JBosstools pour JSF.
Il me semblait que c'était AbortProcessingException qui provoquait le NullPointerException. Je vais regarder du coup.
Si ca peut t'aider pour les prochaines fois :
Lorsque une exception est propagée par une méthode, l'appelant de la méthode qui détecte l'exception peut ajouter à son tour une exception à la pile, on dit qu'il chaine une exception à une autre.
L'appelant de l'appelant peut faire de même... jusqu'à l'appelant d'origine : le thread applicatif.
Comme dans une pile classique, le premier élément ajouté à la pile se trouve tout en bas.at java.lang.Thread.run(Thread.java:619)
C'est pareil pour une lire une stacktrace d'exceptions. Tu dois généralement chercher la source du problème dans la pile d'exception tout en bas : soit après le dernier caused by.
Ils flottent tous en bas
Merci à tous les 2.
D'après mes tests, la méthode updateValue est lancée juste avant que la valeur de la combo change. D'où le NullPointerException : le traitement se fait sur l'ancienne valeur de la combo (qui est null). Comment faire pour lancer un traitement après le changement de valeur?
Merci
Elle est censée être lancé au moment ou la valeur change.D'après mes tests, la méthode updateValue est lancée juste avant que la valeur de la combo change.
Dans la méthode proccessValueChange(ValueChangeEvent event) :
- si tu fais event.getNewValue() tu as la nouvelle valeur choisie
- si tu fais event.getOldValue(), tu as l'ancienne valeur.
Ils flottent tous en bas
J'aurai dû regarder le contenu du getNewValue() bien avant. Il contient l'Id de l'objet sélectionné comme je voulais. Merci pour ce petit rappel utile sur les exceptions.
Encore une petite question : Avec ce nouvel Id, je rafraîchi des données dans la page courante. Les dataTable se mettent bien à jour mais pas les combo box. Une idée?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager