form - selectOneMenu eventos ajax
primefaces ajax event actionlistener (3)
Los eventos ajax de Primefaces están muy poco documentados, por lo que en la mayoría de los casos debe ir al código fuente y verificarlo usted mismo.
p:selectOneMenu
admite el evento de cambio :
<p:selectOneMenu ..>
<p:ajax event="change" update="msgtext"
listener="#{post.subjectSelectionChanged}" />
<!--...-->
</p:selectOneMenu>
que desencadena oyente con AjaxBehaviourEvent
como argumento en la firma:
public void subjectSelectionChanged(final AjaxBehaviorEvent event) {...}
Estoy usando un PrimeFace seleccionable OneOmenMenu 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 selectOneMenu, el área de texto no se debe actualizar.
Pensé que podría trabajar esto con un evento ajax. Sin embargo, no sé qué evento puedo usar aquí. Solo conozco el evento valueChange
. ¿Hay algún otro evento, 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}" />
Puede verificar 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í se ejecutará su código en caso de que el usuario escriba un elemento de su lista selectOneMenu
.
Tenga cuidado de que la página no contenga ningún componente vacío que tenga el atributo "requerido" como "verdadero" antes de ejecutar el componente selectOneMenu.
Si usa un componente como
<p:inputText label="Nm:" id="id_name" value="#{ myHelper.name}" required="true"/>
entonces,
<p:selectOneMenu .....></p:selectOneMenu>
y olvide completar el componente requerido, el oyente ajax de selectoneMenu no se puede ejecutar.