2012-05-08 11 views
7

AJAXified JSF 2.0コンポーネントを扱うときにimmediate="true"を使用しないでください。AJAXified JSF 2.0コンポーネントを扱うときにimmediate = "true"を使用しないでください。

例は次のようになります。

私は、ユーザーが「キャンセル」当たるとJSF 2.0ページの「キャンセル」ボタンを実装する場合は、何の検証を実行してはならない、それならば、私はコンポーネントにimmediate="true"を設定する必要がありますajaxifiedコンポーネントか、フォーム上のコンポーネントを処理する必要がないことを指定する必要がありますか?その場合は、コンポーネントのAJAXified機能を使用してこの機能を実装する方法はありますが、immediate="true"を使用する「古い方法」ではありませんか?

答えて

10

は確かに、キャンセルボタンの上にimmediate="true"を使用する目的は、あなただけの同じフォーム内のすべての入力コンポーネントの処理をスキップする(すでにデフォルトです)execute="@this"に設定することができます<f:ajax>ので、無駄になっています。

フォームは事前に事前に送信されていても、変換/検証の失敗により失敗した場合にのみ問題が発生する可能性があります。キャンセルボタンをajaxで押してからフォームをレンダリングすると、入力は無効とマークされ、モデル値の変更は反映されません(キャンセルのアクションメソッドではentity = new Entity();などと表示されます)フォームの値)。 immediate="true"で同期(非ajaxではない)要求を使用すると、この問題は発生しません。この問題は、実際にはimmediate="true"とは関係ありませんが、AjaxリクエストのJSFライフサイクルがあります。 ajax executeに含まれていないが、ajax renderに含まれているコンポーネントのEditableValueHolder#resetValue()を呼び出すことによって、関連する入力コンポーネントの無効化状態をリセットする必要があります。 OmniFacesには、正確にこの目的のためにResetInputAjaxActionListenerがあります。

関連する問題