3

アイテムを選択するときに、バッキング Bean でアクションを実行するラジオ コンポーネントを使用しています (結果ページに移動するのではなく、何らかのアクションを実行してから、Ajax を介して現在のページを更新します)。問題は、バッキング Bean 値変更リスナー アクションを実行することができないことです。

<h:form id="one-radio">
    <p:selectOneRadio layout="grid" 
                    valueChangeListener="#{myBean.selectRadioItem}" >
        <p:ajax process="@this" update="@form" />
        <f:selectItems value="#{myBean.radioOptions}" var="radio"
            itemLabel="#{radio.name}" itemValue="#{radio.id}" >
        </f:selectItems>
    </p:selectOneRadio>
</h:form>

そしてバッキングビーンメソッド...

public void selectRadioItem(ValueChangeEvent event) {
    String[] selectedItems = (String[]) event.getNewValue();
    //more...
}

私が見逃しているコードに何か問題がありますか? 機能している多くのチェックボックスを選択するために、この同じ構造を使用しました...

4

1 に答える 1

4

ロドリゴ、valueChangeListener と ajax による単純なメソッド呼び出しには違いがあります。

valueChangeListenerとの違いについて、BalusC によるこの回答を確認してください。<f:ajax>

listener問題を解決するには、のプロパティを使用できます<p:ajax>

OneRadio コンポーネントは、1 つの値のみを受け取るために使用されます。値のリストを選択する場合は、SelectOneMenu を使用します。

次のことを試してください。

<p:selectOneRadio layout="grid" value="#{myBean.radioValue}">
    <p:ajax process="@this" update="@form" listener="#{myBean.selectRadioItem}"/>
    <f:selectItems value="#{myBean.radioOptions}" var="radio"
        itemLabel="#{radio.name}" itemValue="#{radio.id}" >
    </f:selectItems>
</p:selectOneRadio>

バックビーンでは、イベント パラメータを削除できます。これは、OneRadio コンポーネントの値が、私が名前を付けたプロパティになったためです。radioValue

String radioValue;
...
public void selectRadioItem() {
    String selectedItem = this.radioValue; 
//more...
}
于 2015-01-09T19:16:58.430 に答える