10

immediate="true"AJAX化されたJSF 2.0コンポーネントを扱うときは絶対に使用しないでください?

例は次のとおりです。

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

4

1 に答える 1

13

実際、同じフォーム内のすべての入力コンポーネントの処理をスキップするためimmediate="true"に、キャンセル ボタンを使用する目的は役に立たなくなり<f:ajax>ました(既にデフォルトになっています)。execute="@this"

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

于 2012-05-08T16:36:02.923 に答える