2012-12-19 93 views
8

我已經爲datatable實現了LazyLoading。當我通過使用分頁運行數據表時,我收到以下例外情況。Primefaces異常INFO:java.lang.ArithmeticException:/ by零java.lang.ArithmeticException:/ by零

com.sun.faces.context.PartialViewContextImpl processPartial 
INFO: java.lang.ArithmeticException:/by zero 
java.lang.ArithmeticException:/by zero 
    at org.primefaces.model.LazyDataModel.setRowIndex(LazyDataModel.java:62) 
    at org.primefaces.component.api.UIData.setRowModel(UIData.java:411) 
    at org.primefaces.component.api.UIData.setRowIndex(UIData.java:403) 

ManagedBean

@PostConstruct 
    public LazyDataModel<Request> getLazyModel() { 
      if (lazyModel == null) { 
      lazyModel = new LazyDataModel<Request>() { 

      @Override 
      public List<Request> load(int startingAt, int maxPerPage, String sortField, 
         SortOrder sortOrder, Map<String, String> filters) { 
      return getRequestService().getRequest(startingAt, maxPerPage, sortField, sortOrder, filters); 
      } 
      }; 
      lazyModel.setRowCount(getRequestService().getRequestCount());   

      } 
      return lazyModel; 
     } 

JSF

<h:form> 
     <p:dataTable id="dataTable" var="req" lazy="true" value="#{reqMB.lazyModel}" 
      paginator="true" rows="10" 
      paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
      rowsPerPageTemplate="5,10,15"> 

DAO用於獲取行計數。

int count = ((Long)sessionFactory.getCurrentSession().createQuery 
("select count(*) from Request").uniqueResult()).intValue(); 

更新1

com.sun.faces.context.PartialViewContextImpl processPartial 
INFO: java.lang.ArithmeticException:/by zero 
java.lang.ArithmeticException:/by zero 
    at org.primefaces.model.LazyDataModel.setRowIndex(LazyDataModel.java:62) 
    at org.primefaces.component.api.UIData.setRowModel(UIData.java:411) 
    at org.primefaces.component.api.UIData.setRowIndex(UIData.java:403) 
    at org.primefaces.component.api.UIData.processChildren(UIData.java:291) 
    at org.primefaces.component.api.UIData.processPhase(UIData.java:263) 
    at org.primefaces.component.api.UIData.processDecodes(UIData.java:229) 
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506) 
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) 
    at org.primefaces.component.api.UIData.visitTree(UIData.java:641) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIForm.visitTree(UIForm.java:344) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376) 
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252) 
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183) 
    at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931) 
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301) 
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) 
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) 
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 
+0

有你在'maxPerPage'任何機會爲零? – AlexZam

+0

@AlexZam'maxPerPage'總是5或10當我測試默認情況下在數據表下拉列表中。我從未改變過。 – user75ponic

+0

這個問題表明你的''中的'rows =「0」'。你正在運行你認爲你正在運行的代碼嗎?也許你有'rows =「#{bean.rows}」'回發時返回'0'? – BalusC

回答

9

根據評論#23 in the issue tracker of primefaces以下應該解決這個問題

@Override 
public void setRowIndex(int rowIndex) { 
    /* 
    * The following is in ancestor (LazyDataModel): 
    * this.rowIndex = rowIndex == -1 ? rowIndex : (rowIndex % pageSize); 
    */ 
    if (rowIndex == -1 || getPageSize() == 0) { 
     super.setRowIndex(-1); 
    } 
    else 
     super.setRowIndex(rowIndex % getPageSize()); 
} 
+0

非常感謝。已經注意到,當範圍是查看,然後這個問題似乎並沒有出現。 – user75ponic

+0

適用範圍要求!謝謝!!! – Ascension

相關問題