Question : Comment réinitiliser toutes les valeurs d'un bean:
Réponse: :
dans la page jsp:
dans le bean:
Code : Sélectionner tout - Visualiser dans une fenêtre à part <h:commandButton actionListener="#{bean.reset}" value="Reset" />
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void reset(ActionEvent e) { FacesContext context = FacesContext.getCurrentInstance(); context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), "#{managedBean}",ManagedBean.class).setValue(context.getELContext(), null); }
Articles: Richfaces - JBosstools pour JSF.
question : comment faire Passé les paramètres d'action du jsf à mon bean ?
réponse1 : en utilisant f:setPropertyActionListener avec les balises h:commandLink et h:commandButton
maintenant les propriétes nomDePropriete1, nomDePropriete2 doivent contenir respectivement les valeur valeurDepropriete1, valeurDepropriete2 passé par le code jsp au maBean.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <h:form> <h:commandLink value="Clicker ici" action="#{maBean.action}"> <f:setPropertyActionListener target="#{maBean.nomDePropriete1}" value="valeurDepropriete1" /> <f:setPropertyActionListener target="#{maBean.nomDePropriete2}" value="valeurDepropriete2" /> </h:commandLink> <h:commandButton value="cliquer ici" action="#{maBean.action}"> <f:setPropertyActionListener target="#{maBean.nomDePropriete1}" value="valeurDepropriete1" /> <f:setPropertyActionListener target="#{maBean.nomDePropriete2}" value="valeurDepropriete2" /> </h:commandButton> </h:form>
Q: Comment Obliger les ValueChangeListener à s'executer dans une phase autre que PROCESS_VALIDATIONS
R:
Code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void action( ValueChangeEvent event){ if(event.getPhaseId().equals(PhaseId.ANY_PHASE)){ event.setPhaseId(PhaseId.INVOKE_APPLICATION);// on l'execute dans la phase INVOKE_APPLICATION event.queue(); return; } // Code ici }
R: Dans un Bean:
Code : Sélectionner tout - Visualiser dans une fenêtre à part String contextPath = ((ServletContext)(FacesContext.getCurrentInstance().getExternalContext().getContext())).getContextPath();
Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Petite proposition pour la FAQ
Comment utiliser les resourceBundle avec JSF (seconde méthode) ?
Il existe certains cas où la première méthode proposée avec <f:loadbundle> ne fonctionne pas. C'est par exemple le cas du message d'erreur que l'on insère par l'attribut "requiredMessage" sur un <h:inputText>. La raison de cette limitation tient au cycle de vie des composants JSF et au fait que <f:loadbundle> initialise une variable qui a la requête comme scope.
Un second moyen d'initialiser un resourceBundle est d'en définir une référence directement à partir du faces-config.xml :
En admettant ici que le package "my.package" contient bundle_fr.properties et bundle_en.properties.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <application> <message-bundle>my.package.bundle</message-bundle> <resource-bundle> <base-name>my.package.bundle</base-name> <var>bundlemessages</var> </resource-bundle> <locale-config> <default-locale>fr</default-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> </locale-config> </application>
L'appel se fait ensuite par exemple avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <h:inputText value="#{myBean.myField}" required="true" requiredMessage="#{bundlemessages.fieldErrorMessage}">
Question : Comment parcourir un String et exécuter les EL jsf qui s'y trouvent ?
Réponse :
Grâce à un exemple : Supposons que nous avons une chaîne de caractère contenant des EL jsf comme par exemple : "voila une expression langage :#{monBean.afficheCoucou()}"
Je vous laisse deviner ce que fait la fonction afficheCoucou() xD
Etape 1 : Utilisation d'une expressionValue
//On considère que l'on est dans une méthode qui prend en parametre un String qui correspond au message a parser
//et qui retourne le message avec les EL interprétées
ValueExpression ve = expressionFactory.createValueExpression(elContext, message, String.class);
return (String)ve.getValue(elContext);
Ainsi, si maintenant on affiche ce message dans un <h:outputText>, on aura :
"voila une expression langage : coucou"
C'est un peu tordu comme cas, mais ça pourrait correspondre à une entrée dans la FAQ en considérant les choses d'une façon plus générique :
Q: Comment évaluer par programmation une expression EL ?
R: En utilisant une ValueExpression
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 String elAEvaluer = "#{monBean.maPropriete}"; // Le dernier paramètre correspond au type attendu, ici un String. A adapter éventuellement. ValueExpression ve = expressionFactory.createValueExpression(elContext, elAEvaluer, String.class); String valeur = (String) ve.getValue(elContext);
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
Partager