So far I have had a JSF managed bean with LazyDataModel , which looked something like this.
@Controller @Scope("request") public final class StateManagedBean extends LazyDataModel<StateTable> { @Autowired private StateService stateService; private final List<StateTable>list; private List<StateTable> selectedValues; private List<StateTable> filteredValues; private Long id; public StateManagedBean() { list=null; stateService=null; } @Override public List<StateTable> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) { int rowCount = stateService.rowCount().intValue(); int currentPage = currentPage(first, pageSize); if(rowCount<=currentPage*pageSize-pageSize) { first-=pageSize; } if(pageSize<=0) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error!", "The page size supplied is incorrect. The current operation has been rejected."); FacesContext.getCurrentInstance().addMessage(null, message); return Collections.emptyList(); } if(filters!=null&&!filters.isEmpty()) { List<StateTable> stateTables = stateService.getList(first, pageSize, sortOrder, sortField, filters); setRowCount(stateTables.size()); return stateTables; } setRowCount(rowCount); return stateService.getList(first, pageSize, sortOrder, sortField); } }
With some other methods that perform some very simple database operations that work fine.
Since I needed to provide several query string parameters for this managed bean, I changed it by deleting only annotations like @Controller , @ManagedBean , @RequestScoped and @Autowired (it is integrated with Spring 3.2.2).
This JSF managed bean was then configured in the faces-config.xml file, for example,
<application> <el-resolver> org.springframework.web.jsf.el.SpringBeanFacesELResolver </el-resolver> </application> <managed-bean> <managed-bean-name>stateManagedBean</managed-bean-name> <managed-bean-class>admin.mangedbean.StateManagedBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>stateService</property-name> <value>#{stateService}</value> </managed-property> <managed-property> <property-name>id</property-name> <value>#{param.id}</value> <property-class>java.lang.Long</property-class> </managed-property> </managed-bean>
With this modification, I received the following unexpected exception.
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:409) at org.primefaces.component.api.UIData.setRowIndex(UIData.java:401) at org.primefaces.component.api.UIData.processChildren(UIData.java:289) at org.primefaces.component.api.UIData.processPhase(UIData.java:261) at org.primefaces.component.api.UIData.processDecodes(UIData.java:227) 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:639) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) at javax.faces.component.UIForm.visitTree(UIForm.java:371) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 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 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) May 16, 2013 9:11:06 PM 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:409) at org.primefaces.component.api.UIData.setRowIndex(UIData.java:401) at org.primefaces.component.api.UIData.processChildren(UIData.java:289) at org.primefaces.component.api.UIData.processPhase(UIData.java:261) at org.primefaces.component.api.UIData.processValidators(UIData.java:241) at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:508) at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) at org.primefaces.component.api.UIData.visitTree(UIData.java:639) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) at javax.faces.component.UIForm.visitTree(UIForm.java:371) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 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.processValidators(UIViewRoot.java:1170) at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) 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 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) May 16, 2013 9:11:06 PM 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:409) at org.primefaces.component.api.UIData.setRowIndex(UIData.java:401) at org.primefaces.component.api.UIData.processChildren(UIData.java:289) at org.primefaces.component.api.UIData.processPhase(UIData.java:261) at org.primefaces.component.api.UIData.processUpdates(UIData.java:253) at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:550) at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:510) at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) at org.primefaces.component.api.UIData.visitTree(UIData.java:639) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) at javax.faces.component.UIForm.visitTree(UIForm.java:371) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) 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.processUpdates(UIViewRoot.java:1229) at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.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 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
The exception only disappeared when I redefined the setRowIndex() method in a managed bean, as shown below.
@Override public void setRowIndex(int rowIndex) { if(rowIndex==-1||getPageSize()==0) { super.setRowIndex(-1); } else { super.setRowIndex(rowIndex%getPageSize()); } }
So, is this a problem with Primefaces? I am using Mojarra 2.1.9 and Primefaces 3.5. It really looks like a problem here . In this case, is it enough to override the setRowIndex() method this way?