Richfaces 4 数据表中的错误,当数据为空时进行数据滚动验证

Richfaces 4 bug in datatable with datascroller validation when empty

我的 Richfaces 应用程序中有一个屏幕,它使用数据表和数据滚动器,并进行验证以确保数据已填充。 (模拟问题的例子,完整的例子可以找到here

<h:form id="articleForm" >

   <h:panelGroup layout="block">
    <rich:messages globalOnly="true" />
    <rich:dataTable value="#{productModifyBean.articles}" var="article" id="articleTable"
     rows="15"  >
     <rich:column headerClass="headerOverflow artNrColumn">
      <f:facet name="header">
       <h:outputText value="articleNumber" />
      </f:facet>
      <h:outputText value="#{article.articleNumber}"/>
     </rich:column>
     <rich:column headerClass="headerOverflow shortNameColumn">
      <f:facet name="header">
       <h:outputText value="Name" />
      </f:facet>
      <h:outputText value="#{article.shortName}" />
     </rich:column>
     <rich:column headerClass="headerOverflow quantityColumn" >
      <f:facet name="header">
       <h:outputText value="Quantity" />
      </f:facet>
      <h:inputText value="#{article.quantity}" required="true"
       requiredMessage="This is required" converterMessage="Error conversion"
       id="modifyArticleFormatQuantity" >
      </h:inputText>
      <rich:message for="modifyArticleFormatQuantity" errorClass="errorColorRed" />
     </rich:column>

    </rich:dataTable>
    <rich:dataScroller for="articleTable" renderIfSinglePage="false" boundaryControls="show" fastControls="hide" execute="@form" render="articleTable"
     stepControls="show" style="float:right;" />
   </h:panelGroup>

   <br style="clear: both" />
   <br style="clear: both" />
   <div align="right" style="clear: both">
    <a4j:commandButton value="#{msgs['button.modify'] }" styleClass="submitButton"
     render="#{facesContext.validationFailed ? '@none' : 'articleForm'}"
     actionListener="#{productModifyBean.modifyProduct}">
    </a4j:commandButton>

   </div>

  </h:form>

数据验证应在用户按下提交按钮(以保存数据)以及用户使用分页转到不同页面时进行。

在将一个字段留空后单击提交按钮时,行为是正常的:它显示一个带有备注 'this is required'

的空字段

然而,当移动到另一个页面时(例如点击“2”页面按钮),验证正确发生,但旧值被放回屏幕,因此说明该值应该被填充但显示它填充了一个值。

任何人都知道这个问题可能是什么原因,以及如何解决它?这是 RichFaces 中的错误,还是我忽略了什么?

我通过反复试验找到了解决方案:

如果我将数据滚动器更改为使用 render="@region" ,屏幕就会正确呈现。

 <rich:dataScroller for="articleTable" renderIfSinglePage="false" boundaryControls="show" fastControls="hide" execute="@form" render="articleTable"
                    stepControls="show" style="float:right;" />