1

私は以下のフォームを持っています:

<h:form>
    <h:dataTable value="#{bean.items}" var="item">
        <h:column>
            <h:selectBooleanCheckbox  value="#{item.enabled}" valueChangeListener="#{bean.onchangeEnabled}">
                <f:ajax event="change" />
            </h:selectBooleanCheckbox>
        </h:column>
        <h:column>#{item.name}</h:column>
    </h:dataTable>
</h:form>

私は取得したい、#{item}または少なくとも#{item.name}値変更リスナーメソッドで:

public void onchangeEnabled(ValueChangeEvent e) {
    // I would like to get #{item.name} here too.
}

どうすればこれを達成できますか?

4

2 に答える 2

7

まず第一に、valueChangeListenerこの仕事には不適切なツールです。を使用し<f:ajax listener>ます。2 つ目event="change"は、物理的な値が実際には変更されないため、チェックボックス/ラジオボタンの場合は間違った選択です。を使用する必要event="click"がありますが、これは既にデフォルトであるため、省略できます。

全体として、適切な初期コードは次のようになります。

<h:selectBooleanCheckbox value="#{item.enabled}">
    <f:ajax listener="#{bean.onchangeEnabled}" />
</h:selectBooleanCheckbox>

public void onchangeEnabled(AjaxBehaviorEvent event) { // Note: event argument is optional.
    // ...
}

そのように修正したら、EL 2.2 機能を簡単に利用してメソッド引数を渡すことができます。

<h:selectBooleanCheckbox value="#{item.enabled}">
    <f:ajax listener="#{bean.onchangeEnabled(item)}" />
</h:selectBooleanCheckbox>

public void onchangeEnabled(Item item) {
    // ...
}

以下も参照してください。

于 2013-01-14T12:15:18.343 に答える
0

selectBooleanCheckbox の場合、イベントのクリックにのみ反応し、フォームが投稿される必要があります。

これをチェックボックスに追加します

valueChangeListener="#{mybean.myfunction}" onchange="submit();"

それは解雇されるべきです!

于 2015-02-11T10:47:48.953 に答える