Seleccionar eventos ajax


Estoy usando un selectOneMenu de primefaces editable para mostrar algunos valores. Si el usuario selecciona un elemento de la Lista, se debe actualizar un área de texto. Sin embargo, si el usuario escribe algo en el selectOneMenu, el textarea no debe actualizarse.

Pensé que podría trabajar esto con ajax event out. Sin embargo, no se que evento puedo usar aquí. Solo conozco el evento valueChange. Hay otros eventos, como onSelect o onKeyUp?

Aquí está mi código:

<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}" />
Author: leostiw, 2013-05-16

3 answers

Los eventos ajax de primefaces están muy mal documentados, por lo que en la mayoría de los casos debe ir al código fuente y comprobarlo usted mismo.

p:selectOneMenu soporta change event:

<p:selectOneMenu ..>
    <p:ajax event="change" update="msgtext"
        listener="#{post.subjectSelectionChanged}" />
    <!--...-->
</p:selectOneMenu>

Que activa el oyente con AjaxBehaviourEvent como argumento en la firma:

public void subjectSelectionChanged(final AjaxBehaviorEvent event)  {...}
 57
Author: Danubian Sailor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-23 09:15:24

Puede comprobar si el valor de su componente selectOneMenu pertenece a la lista de temas.

A saber:

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
    // ....
}

Supuestamente subjectList es un tipo de colección, como ArrayList. Por supuesto, aquí su código se ejecutará en caso de que el usuario escriba un elemento de su lista selectOneMenu.

 2
Author: Stefanos Kargas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-27 10:59:44

Tenga cuidado de que la página no contenga ningún componente vacío que tenga el atributo "required" como "true" antes de que se ejecute el componente selectOneMenu.
Si utiliza un componente como

<p:inputText label="Nm:" id="id_name" value="#{ myHelper.name}" required="true"/>

Entonces

<p:selectOneMenu .....></p:selectOneMenu>

Y olvida llenar el componente requerido, el oyente ajax de selectOneMenu no se puede ejecutar.

 2
Author: ÖMER TAŞCI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-30 15:49:27