2012-12-19 5 views
8

私はデータテーブル用にLazyLoadingを実装しました。ページ設定を使用してdatatableを実行すると、次の例外が発生します。プライムインタフェース例外INFO:java.lang.ArithmeticException:/ /ゼロによってjava.lang.ArithmeticException://0によって

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

関連する問題