JSF / Richfaces / A4j ==>组件/字段转换和reRendering问题

时间:2011-03-10 19:25:41

标签: jsf richfaces lifecycle rerender

我在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”不是有效的netVolume
  5. 点击RESET按钮
  6. 所有已更改的字段都具有原始值,但输入的数字除非已输入
  7. 除非用户手动删除字段中的非数字数据或刷新整个屏幕,否则“错误数据”会显示

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试将参数ajaxSingle="true"添加到按钮。我发现immediate="true"不足以绕过对ajax组件的验证。