4

これまではLazyDataModel、次のような JSF マネージド Bean を使用していました。

@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);
    }
}

正常に機能していた非常に基本的なデータベース操作を実行する他のいくつかの方法を使用します。


このマネージド Bean にいくつかのクエリ文字列パラメーターを指定する必要があったため、@Controller@ManagedBean@RequestScopedおよび などの注釈だけを削除して変更しました@Autowired(Spring 3.2.2 に統合されています)。

この JSF マネージド Bean は、次のfaces-config.xmlようなファイルで構成されました。

<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>

この変更により、次の予期しない例外が発生しました。

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)

setRowIndex()以下のようにマネージドBeanでメソッドをオーバーライドしただけで例外が消えました。

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

それで、これはPrimefacesの問題ですか?Mojarra 2.1.9 と Primefaces 3.5 を使用しています。ここでは本当に問題のようです。その場合、setRowIndex()この方法でメソッドをオーバーライドするだけで十分ですか?

4

1 に答える 1

1

setPageSize(pageSize);内部ロードメソッドを追加してみてください。次のようになります。

@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);
    setPageSize(pageSize); //add this line
    return stateService.getList(first, pageSize, sortOrder, sortField);
}
于 2014-03-25T05:05:28.443 に答える