0

次のような JSF ページに入力フィールドがあります (バッキング Bean の BigDecimal にマップされます)。

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

私の問題を再現する手順は次のとおりです。 a4j:support に reRender 属性が設定されているかどうかに関係なく、エラーが発生することに注意してください。

再現する手順は次のとおりです-さらに明確にするために:

  1. BigDecimal 入力フィールドが存在する画面に移動します
  2. フィールドに aa と入力します (数字である必要がありますが、意図的に数字以外の文字を入れてください)。
  3. フィールドから離れたタブ
  4. エラーが報告されることに注意してください 'aa' is not a valid netVolume
  5. リセットボタンをクリック
  6. 数値以外のデータが入力されたものを除いて、変更されたすべてのフィールドが元の値になります。
  7. ユーザーがフィールド内の数値以外のデータを手動で削除するか、画面全体を更新しない限り、「不良データ」が残る
4

2 に答える 2

0

リセットを行うと、Ajaxリクエストが発生し、フォーム全体が送信され、検証エラーが再度発生します。したがって、フィールドにはまだ古い(誤った)値があります。

于 2011-03-10T19:52:47.850 に答える
0

ボタンにパラメーターを追加してみてくださいajaxSingle="true"immediate="true"ajax コンポーネントの検証をバイパスするには、これでは不十分であることがわかりました。

于 2011-03-10T23:53:05.573 に答える