2013-05-16 11 views
25

いくつかの値を表示するには、編集可能なprimefacesのselectOneMenuを使用しています。ユーザーがリストから項目を選択すると、テキストエリアが更新されます。ただし、ユーザーがselectOneMenuに何かを入力すると、テキストエリアは更新されません。selectOneMenu ajaxイベント

私はajaxイベントでこれを動作させることができると思っていました。しかし、私はここでどのイベントを使うことができるのか分かりません。私はvalueChangeイベントしか知りません。 onSelectonKeyUpのような他のイベントはありますか?

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

答えて

53

primefaces ajaxイベントはほとんど記述されていないため、ほとんどの場合、ソースコードに行き自分で確認する必要があります。

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

署名で引数としてAjaxBehaviourEventでリスナーをトリガー:

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

イベント名は不要です。

2

はあなたがあなたのselectOneMenu成分の値がサブジェクトのリストに属しているかどうかを確認できます。

は、ここに私のコードです。

すなわち:

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

たぶんsubjectListArrayListのように、コレクション型です。もちろん、ユーザselectOneMenuの項目を記載している場合は、あなたのコードが実行されます。

2

ページが「必要としていた任意の空のコンポーネントが含まれていないことを気をつけて

p:selectOneMenu変更イベントをサポートしていますselectOneMenuコンポーネントが実行される前に "true"と指定してください。
あなたは、このような、その後

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

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

し、必要なコンポーネントを埋めることを忘れなどのコンポーネントを使用する場合は、selectoneMenuのAJAXリスナーが実行できません。