Il existe plusieurs méthodes pour passer un paramètre d’une page JSFF ou JSPX à un Managed Bean comme par exemple :
f:setPropertyActionListener
Utilisé dans un af:commandLink ou af:commandButton, ce tag permet de mettre à jour la propriété dans le Managed Bean.
Exemple :
JSFF
<af:commandLink text="commandLink 1" id="cl1"> <f:setPropertyActionListener value="value pass by commandLink" target="#{viewScope.managedBean1.parameter}"/> </af:commandLink>
Managed Bean
... private String parameter; ... public void setParameter(String parameter) { this.parameter = parameter; }
f:attribute
Utilisé dans un af:commandButton, ce tag permet de récupérer la valeur de l’attribut dans la méthode du Managed Bean définie dans la propriété actionListener du commandButton
Exemple :
JSFF
<af:commandButton text="commandButton 1" id="cb2" actionListener="#{viewScope.managedBean1.buttonActionListener}"> <f:attribute name="attributeParameter" value="value pass by f:attribute (commandButton)" /> </af:commandButton> }
Managed Bean
public void buttonActionListener(ActionEvent actionEvent) { ... String parameter = (String) actionEvent.getComponent().getAttributes().get("attributeParameter"); ... }
Par contre, Il n’est pas possible de passer un paramètre lors d’un appel à une méthode d’un Managed Bean via les commandes EL. Il existe heureusement un contournement que je vais exposer dans l’exemple ci-dessous.
L’objectif consiste à afficher dans un OutputText une valeur de clef de bundle non pas en utilisant le mécanisme classique :
... <c:set var="viewcontrollerBundle" value="#{adfBundle['view.ViewControllerBundle']}"/> ... <af:outputText value="#{viewcontrollerBundle.BUNDLE_KEY}" id="ot2"/> ...
mais en faisant appel à une méthode du Managed Bean (getTranslatedTitle) qui effectuera la recherche dans le fichier ViewControllerBundle.properties (ResourceBundle.getBundle().getString()) avec la clef passée en paramètre de la méthode (‘BUNDLE_KEY’).
- ViewControllerBundle.properties
BUNDLE_KEY=Valeur clef de bundle
- JSFF
<af:outputText value="#{viewScope.managedBean1.translatedTitle['BUNDLE_KEY']}" id="ot1"/>
- Managed Bean
public ParameterMap getTranslatedTitle() { return new ParameterMap() { String ret(Object key) { if (key != null) { FacesContext messageContext = FacesContext.getCurrentInstance(); ResourceBundle messageBundle = ResourceBundle.getBundle("view.ViewControllerBundle", messageContext.getViewRoot().getLocale()); return messageBundle.getString(key.toString()); } else { return null; } } }; }
private abstract class ParameterMap extends HashMap<String, String> { @Override public String get(Object key) { return ret(key); } abstract String ret(Object key); }