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}" />
26
demandé sur leostiw 2013-05-16 16:34:42

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)  {...}
57
répondu Danubian Sailor 2015-02-23 09:15:24

, 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.

2
répondu Stefanos Kargas 2013-09-27 10:59:44

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é.

2
répondu ÖMER TAŞCI 2015-11-30 15:49:27