Pourquoi EL me donne le mauvais objet comme paramètre entre parenthèses?
Question
Voici la situation:
Dans une riche: dataTable dans un a4j: forme, créer un a4j: commandLink pour sélectionner les valeurs et le transmettre à la fève avec la syntaxe el d'action jboss
action="#{bean.myaction(myparameter)}"
Cela fonctionne sans problème.
Mais si je réengendrer la forme de filtrer le DataTable avec un appel ajax, lorsque je sélectionne la valeur, il me donne des résultats erronés: l'indice de la sélection, mais les données avant le filtrage
Toutes les idées?
Merci Zack de me donner la bonne solution en seulement 5 minutes.
Je pense que le passage de paramètres dans l'action entre parenthèses est plus élégante mais bon: cela fonctionne. :)
Merci beaucoup.
P.s. J'éditer le titre aussi.
La solution
Essayez d'utiliser:
<a4j:commandLink action="#{bean.myaction}">
<f:param name="myparameter" value="paramValue" />
</a4j:commandLink>
et ensuite accéder à ce paramètre dans votre action via le par la requestParameter("myparameter")
FacesContext
.
Comme un côté note, ce n'est pas jboss EL, c'est la langue d'expression unifiée (EL). Il est juste une caractéristique de JSP / JSF en général, comme spécifié par Sun.
Autres conseils
En plus de la réponse de Zack, je dirais que si vous avez besoin d'étendre les expressions EL afin d'avoir la possibilité de appeler la méthode avec des paramètres, vous pouvez utiliser le la bibliothèque de EL foncteurs:
action="#{bean.myaction$[myparameter].action}"
Votre datatable peuplée en utilisant une collection annotée avec @DataModel? Si oui essayez de le retirer du contexte lors du filtrage afin qu'il soit à nouveau demandé.
par exemple.
//In filter method
Contexts.removeFromAllContexts("yourDataModelCollection");
Mettre le dataTable dans un <a4j:region>
a fonctionné pour moi. De cette façon, vous pouvez toujours utiliser les paramètres JBoss EL.