这可能是一个奇怪的问题,但我们需要抑制来自某个方法的某种类型的异常,使其无法打印到我们的调试控制台。
我正在谈论的这个异常发生在 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>