2011-03-10 7 views
0

JSF/RichFacesの/ A4j ==>コンポーネント/フィールド変換や再レンダリングの問題、私は(バッキングBean上のBigDecimalにマップ)、以下のようなJSFページで入力フィールドを持つ

<h:inputText disabled="#{volumeBean.grossVolumeDisabled}" id="grossVolume" size="10" validateOnExit="true" value="#{volumeBean.enteredGrossVolume}" > 
    <a4j:support ajaxSingle="true" event="onblur" ignoreDupResponses="true" oncomplete="checkFieldValidation(this)" onsubmit="updateDirty()"/> 
    </h:inputText> 

そしてa4j:commandButtonのページ上のデータベースからすべてのデータを「リフレッシュ」します とエラーに関係なくa4jに設定された再レンダリング属性が存在するかどうかの発生することに注意してください:ここでは

<a4j:commandButton accesskey="T" action="#{volumeBean.revert}" button-type="ajax" disabled="#{volumeBean.revertDisabled}" id="volumeBean_reset"   immediate="true" reRender="volumesTable" value="#{msg.button_RESET}"/> 

は私の問題を再現する手順です。 :サポート

ここでは再現するための手順です - ちょうど、さらに明確にする:

  1. は(BigDecimalの入力フィールドがフィールドに
  2. AA型が存在する画面に移動数でなければなりませんが、数字以外の文字を入れますフィールドオフ意図的に)
  3. タブにエラーが「AA」を報告された旨の通知が有効netVolume
  4. RESETボタンをクリック
  5. の全てではありません
  6. 変更されたフィールドは、ユーザが手動でフィールドに非数値データを削除するか、画面全体をリフレッシュしない限り、非数値データが「不良データ」

答えて

0

スティック、

  • に入っているものを除き、それらの元の値を有しますあなたはリセットを行い、Ajaxリクエストを発し、フォーム全体が送信され、検証エラーが再び発生します。フィールドにはまだ古い(正しくない)値があります。

  • +0

    リセットボタンには 'immediate = "true"'が含まれているため、検証をバイパスする必要があります。 – Naganalf

    +0

    会話が失敗するため、間違った値がコンポーネントのsubmittedValue内に保持されます。正しいですが、conversation/validationはimmediate = "true"のときは処理されませんが、ページがレンダリングされるときはsubmittedValueの値が使用されます。 submittedValueをクリアする必要があります。 –

    +0

    submitValueを自動的またはプログラムでクリアするにはどうすればよいですか? – Nena

    0

    ボタンにajaxSingle="true"というパラメータを追加してみてください。私は、immediate="true"がajaxコンポーネントの検証をバイパスするのに適切でないことを発見しました。

    +0

    ajaxSingleは検証をスキップしません。これは、現在のコンポーネントだけが処理されることを意味します。つまり、JSFライフサイクルを経ることを意味します。 –

    +0

    私はajaxSingle = "true"を使ってみました - うまくいきませんでした。何らかの理由で値は依然としてクライアント側にキャッシュされます。 – Nena

    関連する問題