Comment puis-je obtenir PrimeFaces & lt; p: selectOneMenu & gt; appeler valueChangeListener?
À l'aide de PF 3.0-RC1 Instantané (11/22/2011)
J'ai un dans un composant composite.
Je tiens à appeler l'valueChangeListener lorsqu'une sélection est faite, mais il ne semble pas être l'appel de l'auditeur.
Voici le code pour le composant:
<p:selectOneMenu style="width: 220px;"
value="#{customerProfileSessionBean.selectedAccount}"
valueChangeListener="#{customerProfileSessionBean.accountValueChange}" >
<f:selectItems value="#{sessionBean1.custAccountList}"/>
</p:selectOneMenu>
L'auditeur dans le backing bean dispose d'une instruction d'impression qui n'est pas appelé (à moins que je ne pas le voir dans le journal du serveur).
Est-il autre chose que je dois faire pour obtenir le valueChangeListener être appelée lors de la modification de la valeur?
Dois-je utiliser ?
Aussi, chez l'auditeur, est-il un ValueChangeEvent qui est passé?
Grâce.
source d'informationauteur Burferd
Vous devez vous connecter pour publier un commentaire.
Vous semblent s'attendre à ce que le
valueChangeListener
méthode dans le côté serveur est appelé immédiatement lorsqu'un changement événement se produit sur le côté client. Ce n'est pas correct. Il ne sera invoquée lorsque le formulaire est soumis pour le serveur et la nouvelle valeur n'est pasequals()
l'ancienne valeur.Il y a au moins deux façons d'obtenir votre exigence fonctionnelle:
Ajouter
onchange="submit()"
de sorte que JavaScript soumettre le formulaire à chaque fois que vous modifiez la valeur:Ceci est cependant très JSF-1.x-ish et les pauvres pour l'expérience utilisateur. Il permettra également de présenter (et de les convertir/valider!) tous les autres champs de saisie qui peut ne pas être ce que vous voulez.
Utiliser de l'ajax auditeur au lieu de cela, pour sûr, si vous n'êtes pas intéressé à la valeur réelle de changement (c'est à dire l'ancienne valeur n'est pas intéressant pour vous), mais vous êtes réellement intéressé par le changement de l'événement lui-même. Vous pouvez faire cela en utilisant
<f:ajax>
ou dans PrimeFaces composants à l'aide de<p:ajax>
:Et remplacer le
ValueChangeEvent
argument par leAjaxBehaviorEvent
argument.Ajouter f:ajax déclaration pour p:selectOneMenu , il crée un appel ajax et votre valeur sera soumis EX:
Ou vous pouvez fournir l'id du panneau ou de la datatable id ,si vous ne voulez torender l'ensemble de la forme, comme: