0

这可能是一个奇怪的问题,但我们需要抑制来自某个方法的某种类型的异常,使其无法打印到我们的调试控制台。

我正在谈论的这个异常发生在 Primefaces 的 LazyDataModel 上,其中 setter 方法抛出算术异常:/ 当在数据表生命周期的某个阶段,pageSize 为 0 时,它会继续抛出该异常。

来自 Primefaces 框架的 LazyDataModel.class 的父类方法是:

public void setRowIndex(int rowIndex) {
    this.rowIndex = rowIndex % this.pageSize;
}

常见的解决方案如下:

  @Override
  public void setRowIndex(int rowIndex) {
    if (rowIndex == -1 || getPageSize() == 0) {
      super.setRowIndex(-1);
    }
    else {
      super.setRowIndex(rowIndex % getPageSize());
    }
  }

但是,上面发布的解决方案仍然设法在 pageSize 为 0 时将 Arthimetic Exception: / 抛出零。我们尝试捕获异常并在我们的方法中操作值,因此不会抛出异常,但这会破坏 UI。

当我们没有覆盖方法时,一切正常,但仍会打印异常。我们的管理层不希望这样。

我现在想到的解决方案是删除我的覆盖方法并尝试抑制来自 JVM 或方法本身的异常。管理层似乎很乐意接受这一点。在这些方面有什么方法可以尝试吗?

更新 1:根据 PSo 的要求,我们没有在任何地方(后端或前端)明确设置 pageSize。

视图文件中的数据表定义

        <p:dataTable widgetVar="myWidgetName" var="myDataVariable" value="#{myManagedBean.dataList}" rowIndexVar="myRowIndexVariable" id="myDataTableId"
                     styleClass="myStyleClass" emptyMessage="No Records Found"
                     rowStyleClass="myRowStyleClass"
                     scrollable="false"
                     paginator="true"
                     rows="5"
                     paginatorAlwaysVisible="true"
                     paginatorPosition="both"
                     paginatorTemplate="{FirstPageLink} {PreviousPageLink} {JumpToPageDropdown} {PageLinks} {NextPageLink} {LastPageLink}"
                     rowsPerPageTemplate="10" 
                     selection="#{myManagedBean.mySelectedRecord}"
                     rendered="true">

            <p:column headerText="#">
            <h:outputText>#{myDataRowIndex}</h:outputText></p:column>
            <p:column styleClass="myColumnStyleClass">
                
            </p:column>

        </p:dataTable>
4

0 回答 0