我在 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
- 单击重置按钮
- 所有更改的字段都有其原始值,但输入了非数字数据的字段除外
- 除非用户手动删除字段中的非数字数据或刷新整个屏幕,否则“坏数据”会一直存在