次のような 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 属性が設定されているかどうかに関係なく、エラーが発生することに注意してください。
再現する手順は次のとおりです-さらに明確にするために:
- BigDecimal 入力フィールドが存在する画面に移動します
- フィールドに aa と入力します (数字である必要がありますが、意図的に数字以外の文字を入れてください)。
- フィールドから離れたタブ
- エラーが報告されることに注意してください 'aa' is not a valid netVolume
- リセットボタンをクリック
- 数値以外のデータが入力されたものを除いて、変更されたすべてのフィールドが元の値になります。
- ユーザーがフィールド内の数値以外のデータを手動で削除するか、画面全体を更新しない限り、「不良データ」が残る