selectOneMenu événements ajax
J'utilise un primefaces selectonemenu modifiable pour afficher certaines valeurs. Si l'utilisateur sélectionne un élément de la liste, une zone de texte doit être mise à jour. Cependant, si l'utilisateur tape quelque chose dans selectOneMenu, la zone de texte ne doit pas être mise à jour.
Je pensais que je pourrais travailler avec ajax event out. Cependant, je ne sais pas quel événement je peux utiliser ici. Je ne connais que l'événement valueChange
. Existe-il d'autres événements, comme onSelect
ou onKeyUp
?
Voici mon code:
<p:selectOneMenu id="betreff" style="width: 470px !important;"
editable="true" value="#{post.aktNachricht.subject}">
<p:ajax event="valueChange" update="msgtext"
listener="#{post.subjectSelectionChanged}" />
<f:selectItems value="#{post.subjectList}" />
</p:selectOneMenu>
<p:inputTextarea style="width:550px;" rows="15" id="msgtext"
value="#{post.aktNachricht.text}" />
3 réponses
Les événements primefaces ajax sont très mal documentés, donc dans la plupart des cas, vous devez aller au code source et vérifier vous-même.
p:selectOneMenu
prend en charge modifier événement:
<p:selectOneMenu ..>
<p:ajax event="change" update="msgtext"
listener="#{post.subjectSelectionChanged}" />
<!--...-->
</p:selectOneMenu>
Qui déclenche l'écouteur avec AjaxBehaviourEvent
comme argument dans la signature:
public void subjectSelectionChanged(final AjaxBehaviorEvent event) {...}
, Vous pouvez vérifier si la valeur de votre selectOneMenu
composant appartient à la liste des sujets.
À savoir:
public void subjectSelectionChanged() {
// Cancel if subject is manually written
if (!subjectList.contains(aktNachricht.subject)) { return; }
// Write your code here in case the user selected (or wrote) an item of the list
// ....
}
Soi-disant subjectList
est un type de collection, comme ArrayList
. Bien sûr, ici, votre code s'exécutera au cas où l'utilisateur écrirait un élément de votre liste selectOneMenu
.
Veillez à ce que la page ne contienne aucun composant vide dont l'attribut" required " est "true" avant l'exécution de votre composant selectOneMenu.
Si vous utilisez un composant tel que
<p:inputText label="Nm:" id="id_name" value="#{ myHelper.name}" required="true"/>
Puis,
<p:selectOneMenu .....></p:selectOneMenu>
Et oubliez de remplir le composant requis, l'écouteur ajax de selectoneMenu ne peut pas être exécuté.