JSF ValueChangeListener in editable p:SelectOneMenu

Fant

Bekanntes Mitglied
Hallo zusammen!

Ich hoffe, dass meine Frage hier richtig aufgeben ist... Ich habe in meiner Webanwendung ein SeelctOneMenu, welches zusätzlich die Möglichkeit bieten soll einen individuellen Text eingeben zu können:

HTML:
<p:selectOneMenu id="somID" editable="true" value="#bean.myAttribute}">

     <f:selectItem itemLabel="Select One" itemValue="" />
     <f:selectItem   .....
                           .....                                             />
     <p:ajax event="change" update="somID" listener="#bean.myListener}"/>
                               
</p:selectOneMenu>

Der Listener wird aber nur aufgerufen, wenn ich einen Punkt aus dem SelectMenu auswähle und nicht, wenn ich das Textfeld frei beschreibe.

Bei einem normalen InputText-Element funktioniert es wie gewünscht:
HTML:
<p:inputText value="#{bean.myAttribute}">
     <p:ajax event="change" listener="#{bean.myListener}"/>
</p:inputText>

Wenn ich im SelectOneMenu beispielsweise
HTML:
<p:ajax event="keyup" update="somID" listener="#bean.myListener}"/>
ergänze, so wird dies einfach ignoriert.

Weiß einer Rat, wie ich dafür sorgen kann, dass auch eine manuelle Eingabe im SelectOneMenu den Listener ansteuert?


Gruß Fant

[EDIT]
Fall das wichtig ist: Ich benutze Primefaces 3.1 JSF 2.0 Mojarra 2.1.3
[/EDIT]
 
Zuletzt bearbeitet:
Das eine ist eine 'AjaxBehavior' listener und du brauchst einen ValueChangeListener der auf das Event reagiert:

Java:
<p:selectOneMenu value="#{bean.attribute} valueChangeListener="#{bean.valueChanged}">
<f:selectedItems value="#{bean.attributes}"/>
<P:ajax execute="@this" render="something"/>
</p:selectOneMenu>

...


public class Bean{
...

public void valueChanged(ValueChangeEvent arg0){
System.out.println("  new: "+arg0.getNewValue()+" old: "+arg0.getOldValue());
}

}

Wichtig: Falls du irgendwo ein required="true" Pflichtfeld in der Form hast, musst du das selectOneMenue mit immediate="true" ausführen.

Grüße
 
Danke für deine Antwort, aber auch mit deiner Lösung bleibt das Problem das gleiche:
Wenn ich einen vorgegebenen Menüpunkt auswähle, dann wird der Listener aufgerufen, aber wenn ich das Textfeld frei beschreibe, dann tut sich nix...

Ich hab es sowohl mit
HTML:
<p:ajax process="@this" update="myId"/>
als auch mit
HTML:
<f:ajax execute="@this" render="myId"/>
probiert.

Gruß Fant


[WR]
Ich fürchte, dass das, was ich möchte, ganz einfach noch nicht klappt. Vergleiche hier:
Issue 3504 - primefaces - Add onblur event to selectOneMenu - Next Generation Component Suite - Google Project Hosting
und hier
PrimeFaces Forum &bull; View topic - keyup event for <p:selectOneMenu>
[/WR]
 
Zuletzt bearbeitet:
Sorry für den Doppelpost, aber ich kann meinen letzten Beitrag nicht mehr editieren.

Falls es jemanden geben sollte, den das Problem interessiert:
Ich habe im primefaces-Forum ein Thema zu meiner Frage eröffnet, welches hier zu finden ist.

Gruß Fant
 

Neue Themen


Zurück
Oben