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 回答