2013-05-16 6 views
25

Bazı değerleri görüntülemek için selectOneMenu düzenlenebilir bir primefare kullanıyorum. Kullanıcı Listeden bir öğe seçerse, bir textarea güncellemelidir. Ancak, kullanıcı selectOneMenu'da bir şey yazarsa, textarea güncelleştirilmemelidir.selectOneMenu ajax events

Bunu ajax olayıyla çalıştırabileceğimi düşündüm. Ancak, hangi etkinliği kullanabileceğimi bilmiyorum. Ben sadece valueChange olayını biliyorum. onSelect veya onKeyUp gibi başka etkinlik var mı?

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

cevap

53

Primefaces ajax olayları çok zayıf bir şekilde belgelenmiştir, bu nedenle çoğu durumda kaynak koduna gitmeli ve kendinizi kontrol etmelisiniz. imzadaki argüman olarak AjaxBehaviourEvent ile dinleyiciyi tetikler

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

:

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

Şimdi etkinlik adı gerekli değil, sadece

2

Sen selectOneMenu bileşenin değeri konuların listesinin ait olup olmadığını kontrol edebilir:

İşte benim kodudur. Yani

:

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

Sözde subjectListArrayList gibi bir koleksiyon türüdür. Tabii ki burada kullanıcısı numarasını selectOneMenu listenizde yazıyorsa kodunuz çalışacaktır.

2

sayfa olan herhangi boş bir bileşen içermediğini dikkatli olun "Gerekli

p:selectOneMenu

değiştireceğim olayı destekler selectOneMenu bileşeniniz çalışmaya başlamadan önce "true" olarak nitelendirin.
Böyle

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

,

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

gibi bir bileşeni kullanmak ve gerekli bileşeni doldurmak için unutursanız, selectoneMenu ait ajax dinleyici yürütülemez.