web-dev-qa-db-ja.com

selectOneMenu ajaxイベント

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

私は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}" />
29
leostiw

PrimeFacesのajaxイベントは、文書化が非常に不十分な場合があるため、ほとんどの場合、ソースコードにアクセスして自分で確認する必要があります。

p:selectOneMenuサポート変更イベント:

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

署名の引数としてAjaxBehaviorEventを使用してリスナーをトリガーします。

public void subjectSelectionChanged(final AjaxBehaviorEvent event)  {...}
61
Danubian Sailor

SelectOneMenuコンポーネントを実行する前に、「required」属性が「true」である空のコンポーネントがページに含まれていないことに注意してください。
次のようなコンポーネントを使用する場合

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

その後、

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

必要なコンポーネントを入力するのを忘れると、selectoneMenuのajaxリスナーを実行できません。

3
ÖMER TAŞCI

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のようなコレクション型です。もちろんここでは、ユーザーwritesselectOneMenuリストの項目の場合にコードが実行されます。

2
Stefanos Kargas

もっと便利なitemSelectイベントを使用したいです。このイベントでは、org.primefaces.event.SelectEventリスナー内のオブジェクト。

<p:selectOneMenu ...>
    <p:ajax event="itemSelect" 
        update="messages"
        listener="#{beanMB.onItemSelectedListener}"/>
</p:selectOneMenu>

そのようなリスナーの場合:

public void onItemSelectedListener(SelectEvent event){
    MyItem selectedItem = (MyItem) event.getObject();
    //do something with selected value
}
2