1

問題が発生しました: IE8 では f:ajax のイベントが機能せず、値を変更した後に他のコンポーネントを更新しません。

<h:selectBooleanCheckbox id="someId"
                        value="#{someBean.showEmpty}"
                        title="#{i18n['button.showEmpty']}">
                        <f:ajax event="change"
                            listener="#{someBean.changeShowEmpty}"
                            execute=":someForm @form" render=":messages :someForm @form" />
                    </h:selectBooleanCheckbox>

Chrome、Opera、Firefox で動作します。助けてくれてありがとう。

4

1 に答える 1

2

これは、MSIE の「予期される」動作です。MSIE は最初のクリックは本質的に変更ではないと考えているため、2 回目以降の変更でのみ機能します。click代わりに、イベントをリッスンする必要があります。<f:ajax> これは、がデフォルトで に対して行うこととまったく同じです<h:selectBooleanCheckbox>event属性を完全に削除するだけです。

<f:ajax listener="#{someBean.changeShowEmpty}"
    execute=":someForm @form" render=":messages :someForm @form" />

はコンポーネント内に<f:ajax event>デフォルト設定さ"valueChange"れ、UIInputコンポーネント内にデフォルト設定さ"action"UICommandます。UIInputラジオ ボタンまたはチェックボックスを生成するコンポーネントでは、 が生成されますonclick。他のUIInputコンポーネント (テキスト フィールド、テキストエリア、ドロップダウンなど) では、 が生成されonchangeます。


具体的な問題とは関係ありませんが、現在のフォームの送信と一緒に値が送信されないという理由だけで、属性で考えているように見えるものに反して処理することは<h:form>できません。executeしかし、それは別の話です。

于 2012-04-28T14:06:27.930 に答える