2013-05-16 16 views
25

Ich benutze editierbare primefaces selectOneMenu um einige Werte anzuzeigen. Wenn der Benutzer ein Element aus der Liste auswählt, sollte ein Textfeld aktualisiert werden. Wenn der Benutzer jedoch etwas in das selectOneMenu eingibt, sollte das Textfeld nicht aktualisiert werden.selectOneMenu ajax events

Ich dachte, ich könnte dies mit Ajax-Ereignis aus arbeiten. Ich weiß jedoch nicht, welches Ereignis ich hier verwenden kann. Ich kenne nur das valueChange Ereignis. Gibt es andere Ereignisse, wie onSelect oder onKeyUp?

Hier ist mein 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}" /> 

Antwort

53

Die Primzahlen AJAX-Ereignisse sind sehr schlecht dokumentiert, so dass Sie in den meisten Fällen zum Quellcode gehen und sich selbst überprüfen müssen.

p:selectOneMenu unterstützt Änderung Ereignis:

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

die Zuhörer mit AjaxBehaviourEvent als Argument Signatur auslöst:

public void subjectSelectionChanged(final AjaxBehaviorEvent event) {...} 
+0

Jetzt ist der Ereignisname nicht notwendig, wir können einfach verwenden –

2

Sie könnten prüfen, ob der Wert Ihrer selectOneMenu Komponente in die Liste der Themen gehört.

Nämlich:

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

Angeblich soll subjectList ist eine Sammlung Art, wie ArrayList. Natürlich wird Ihr Code ausgeführt, falls der Benutzer einen Eintrag Ihrer selectOneMenu Liste schreibt.

2

Seien Sie vorsichtig, dass die Seite keine leeren Komponente enthält, die „erforderlich ist msgstr "Attribut als" wahr "bevor Ihre selectOneMenu Komponente läuft.
Wenn Sie eine Komponente verwenden, wie

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

dann,

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

und vergessen Sie die gewünschte Komponente, Ajax Zuhörer von selectoneMenu füllen kann nicht ausgeführt werden.