salut les amis :)
je veux savoir comment appeler plusieurs méthodes à partir de action
et aussi c'est quoi la différence entre action et actionListener ?Code:<p:commandButton value="Valider" action="#{....}" />
Version imprimable
salut les amis :)
je veux savoir comment appeler plusieurs méthodes à partir de action
et aussi c'est quoi la différence entre action et actionListener ?Code:<p:commandButton value="Valider" action="#{....}" />
salut
1 - non ... mais rien n'empêche ta méthode d'appeler d'autres méthodes
2 - l'action, va renvoyer une "cible" de navigation, la méthode d'ailleurs renvoyer String. l'actionListener n'est que sorte de "hook", d'ailleurs elle ne renvoie rien. JSF n'attend rien en retour si ce n'est qu'elle ne génére pas d'exception. Tu peux effectivement combiner actionListener et action sans problème mais ce ne sont pas des méthodes de même signature ni déclencher en parallèle ... d'abord le actionListener, puis l'action si la première s'est bien passé ...
et puis y'a un endroit pas mal sur internet où on peut aussi trouver quelques réponses à ce sujet ;)
http://www.google.fr/search?q=differ...actionListener
et puis la fonction recherche de ce forum marche bien aussi :
http://www.developpez.net/forums/d63...ctionlistener/
salut,
il suffit d'injecter un bean ds un autre.
essaye de voir de ce coté:
http://netbeans.org/kb/docs/javaee/cdi-inject.html
http://netbeans.org/kb/docs/javaee/cdi-intro.html
Tout à fait, neo640 a raison, mais je pense qu'utiliser @ManagedProperty de JSF serait plus facile.
exemple :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 @ManagedBean class MonBeanNumeroUn { @ManagedProperty(value="#{monBeanNumeroDeux}") MonBeanNumeroDeux autreBean; public String actionBean() { // TODO : faire le boulot du Bean 1 // String retourAutreBean = autreBean.actionBean(); // ok mais on retourne quoi ? // ici on décide de retourner la "décision de navigation de l'autre Bean return retourAutreBean; } }
merci les amis pour l'aide :) j'ai essayé la solution de fxrobin et ça marche bien ;)
mais il y a un probleme si monBeanNumeroDeux n'est pas encore crée (n'est pas encore appelé à partir d'une page jsf (xhtml)), comment faire dans ce cas ??
Il sera créé automatiquement et mis automatiquement dans le bon scope.
Donc aucun problème.
j'utilse ces injections sur toutes mes applications, c'est fait pour ça donc aucun problème.
si tu veux obtenir le même résultat, sans annotation mais en utilisant les API JSF:
Cette méthode s'utiliserait de la sorte :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class JsfUtils { /** * Méthode qui permet d'obtenir l'instance d'un bean managé par JSF * au moyen d'une expression EL. * * @param <T> * type paramétré générique * @param elExpression * expression EL. Ex : "#{secondBean}" * @param type * classe de l'instance managée par JSF * @return * instance managée par JSF * * @author fxrobin * @version 1.0 */ public static <T> T getManagedBean(String elExpression, Class<T> type) { FacesContext context = FacesContext.getCurrentInstance(); return (T) context.getApplication().evaluateExpressionGet(context, elExpression, type); } }
La seule contrainte, c'est qu'il faut qu'il y ait un contexte JSF rattaché au Thread courant.Code:
1
2 SecondManagedBean = JsfUtils.getManagedBean("#{secondManagedBean}", SecondManagedBean.class);
En effet, à la compilation, rien n'empêcherait d'appeler cette méthode statique dans une méthode "public static void main(String... args)", mais celle ci (si elle était déclenchée) ne ferait pas partie d'un contexte d'exécution JSF. On obtiendrait alors dans ce cas une RuntimeException.
ça marche aussi pour moi mais j'avais un probléme si le bean commence par une majuscule (ViewdossierBean ) ça marche pas :
pourtant ce code marche bien :Code:
1
2 @ManagedProperty(value="#{Viewdossier}") Viewdossier ViewdossierBean ;
je crois qu'avec JSF il faut bien suivre les norme de nomage des beans, je suis pas sure, en tout cas un grand merci à vous fxrobin.Code:
1
2 @ManagedProperty(value="#{Viewdossier}") Viewdossier viewdossierBean ;
ah oui les majuscules / minuscules sont importantes.
mais on peut forcer le nom d'un bean à celui qu'on veut (même si je n'aime pas trop ça)
exemple :
pour faire référence à ce bean : #{MON_BEAN}Code:
1
2
3
4
5
6 @ManagedBean(name="MON_BEAN"); public class MyBean { }
De rien en tout cas pour l'aide :ccool:;)