J'ai écrit une facelet, et un bean backing correspondant, qui implémente la gestion des utilisateurs (ajout, suppression, etc.).Comment lire un paramètre transmis à une facelet à partir d'un bean backing
I'd want to be able to perform some custom processing when, for instance, a new user is added.
Il existe un bouton "créer" dans la facelet, dont l'événement click est géré par son bean backing. À la fin du gestionnaire d'événements, je voudrais être en mesure d'appeler une méthode d'un autre bean backing, ce qui n'est pas connu car, idéalement, le facelet peut être utilisé sur plusieurs pages, avec un traitement personnalisé différent.
Je pensais que pour mettre en œuvre cette fonctionnalité en fournissant au Facelet un nom de haricot support et un nom de méthode, comme ceci:
<myfacelet:subaccounts
backingBean="myBackingBean"
createListener="createListener" />
et à la fin de l'appel du gestionnaire d'événements # {myBackingBean.createListener} someway .
J'utilise cette méthode (avec quelques surcharges) pour obtenir un MethodExpression:
protected MethodExpression getMethodExpression(String beanName, String methodName, Class<?> expectedReturnType, Class<?>[] expectedParamTypes)
{
ExpressionFactory expressionFactory;
MethodExpression method;
ELContext elContext;
String el;
el = String.format("#{%s['%s']}", beanName, methodName);
expressionFactory = getApplication().getExpressionFactory();
elContext = getFacesContext().getELContext();
method = expressionFactory.createMethodExpression(elContext, el, expectedReturnType, expectedParamTypes);
return method;
}
et le gestionnaire d'événements de clic devrait ressembler à:
public void saveSubaccountListener(ActionEvent event)
{
MethodExpression method;
...
method = getMethodExpression(
"backingBean",
"createSubaccountListener",
SubuserBean.class);
if (method != null)
method.invoke(
getFacesContext().getELContext(),
new Object[] { _editedSubuser });
}
Cela fonctionne bien aussi longtemps que Je fournis un nom de bean existant (myBackingBean), mais si j'utilise backingBean, invoke() ne fonctionne pas en raison de l'erreur suivante:
javax.el.PropertyNotFoundException: Target Unreachable,
identifier 'backingBean' resolved to null
Existe-t-il un moyen de récupérer à partir du bean de retour de facelet la valeur d'un paramètre qui a été passé à la facelet? Dans mon cas, la valeur de backingBean, qui devrait être myBackingBean?
J'ai cherché et essayé différentes solutions, mais sans aucune chance pour le moment.
Cela ne semble pas résoudre mon problème. J'ai déjà accès au backing bean à partir du code facs jsf, mais pas à partir du backle bean. Btw J'ai essayé votre code, le texte de sortie fonctionne bien, mais quand j'essaie d'utiliser MethodExpression.invoke() il ne fonctionne pas - même erreur – Antonio