JSF/Richfaces/A4j==>;组件/字段转换和重新招标问题

JSF/Richfaces/A4j==>;组件/字段转换和重新招标问题,jsf,richfaces,lifecycle,rerender,Jsf,Richfaces,Lifecycle,Rerender,我在JSF页面中有一个输入字段,如下所示(映射到支持bean上的BigDecimal) 以及一个a4j:commandButton,用于“刷新”页面上数据库中的所有数据: <a4j:commandButton accesskey="T" action="#{volumeBean.revert}" button-type="ajax" disabled="#{volumeBean.revertDisabled}" id="volumeBean_reset" imm

我在JSF页面中有一个输入字段,如下所示(映射到支持bean上的BigDecimal)


以及一个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”不是有效的netVolume
  • 单击重置按钮
  • 除输入非数字数据的字段外,所有更改的字段都有其原始值
  • 除非用户手动删除字段中的非数字数据或刷新整个屏幕,“坏数据”仍然存在

  • 当您进行重置时,您会触发一个Ajax请求,整个表单都会提交,并且再次出现验证错误。因此该字段仍然具有旧的(不正确的)值

    尝试向按钮添加参数
    ajaxSingle=“true”
    。我发现
    immediate=“true”
    不足以绕过ajax组件上的验证。

    重置按钮具有“immediate=“true”,因此它应该绕过验证。由于对话失败,组件中的submittedValue中保留了不正确的值。您是正确的,当immediate=“true”时不会处理对话/验证,但当呈现页面时,将使用submittedValue中的值。您需要清除submittedValue。如何自动或以编程方式清除submittedValue?查看JSF API中的组件。getSubmittedValue()ajaxSingle不会跳过验证。这意味着只有当前组件将被处理,换句话说,将经历JSF的生命周期。该值仍然以某种方式缓存在客户端。
        <a4j:commandButton accesskey="T" action="#{volumeBean.revert}" button-type="ajax" disabled="#{volumeBean.revertDisabled}" id="volumeBean_reset"         immediate="true" reRender="volumesTable" value="#{msg.button_RESET}"/>