/ by zero exception

UI Components for JSF
Post Reply
v.yagodin
Posts: 4
Joined: 30 Sep 2010, 19:57

12 Oct 2010, 20:43

Hello all!


First of all I would like to describe the situation(some code will be added afterward): so we have some edit form of EnterpriseObject it have backing bean EnterpriseObjectBean, on this form we have some fields and one of them (LegalPerson) have LOV, this LOV is a Dialog which shows a Datatable with LegalPersons, so the point is to select a LegalPerson from this LOV. We have some thousands of legal persons so we must implement some searching possibility to find one we need, so we added simple field and button to search. Here we used same backing bean that is used for main LegalPerson form(LegalPersonBean). So after we make a search from LOV we have ArithmeticException - / by zero, but if we make search from LegalPerson list form we don't. Operations are very similar...

Exception

Code: Select all

2010.12.10 21:13:36 com.sun.faces.lifecycle.ApplyRequestValuesPhase execute
WARNING: / by zero
java.lang.ArithmeticException: / by zero
        at org.primefaces.model.LazyDataModel.setRowIndex(LazyDataModel.java:62)
        at javax.faces.component.UIData.setRowIndex(UIData.java:448)
        at javax.faces.component.UIData.iterate(UIData.java:1407)
        at javax.faces.component.UIData.processDecodes(UIData.java:980)
        at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1043)
        at javax.faces.component.UIForm.processDecodes(UIForm.java:212)
        at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1043)
        at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1043)
        at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:920)
        at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:74)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
....

EnterpriseObject edit form

Code: Select all

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="../template/ui.xhtml">

    <ui:define name="title">#{msgs['EnterpriseObject.form.name']}</ui:define>


    <ui:define name="content">
        <h:form id="enterpriseObjectForm">

            <p:panel id="panel" style="margin-bottom:10px;">
                <f:facet name="header">
                    <h:outputText value="#{msgs['EnterpriseObject.form.name']}" styleClass="formHeader"/>
                </f:facet>
                <h:panelGrid columns="2" columnClasses="column" cellpadding="5" >

                    <h:outputLabel for="name" value="#{msgs['EnterpriseObject.name']}" styleClass="required" />
                    <h:inputText id="name" label="#{msgs['EnterpriseObject.name']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.name}" required="true" size="50" />

                    <h:outputLabel for="eoType" value="#{msgs['EnterpriseObject.eoType']}" styleClass="required" />
                    <h:selectOneMenu id="eoType" label="#{msgs['EnterpriseObject.eoType']}" value="#{enterpriseObjectBean.enterpriseObject.eotRefId}" required="true">
                        <f:selectItem itemValue="" itemLabel="" />
                        <f:selectItems value="#{enterpriseObjectBean.clEnterpriseObjectTypes}" var="eotVar" itemLabel="#{eotVar.name}" itemValue="#{eotVar.id}"/>
                    </h:selectOneMenu>

                    <h:outputLabel for="lgpLgpId" value="#{msgs['EnterpriseObject.legalPerson']}" styleClass="required" />
                    <h:panelGroup id="lovLegalPersonValue">
                        <h:inputText id="lgpLgpId" label="#{msgs['EnterpriseObject.legalPerson']}" disabled="true"
                                     value="#{enterpriseObjectBean.enterpriseObject.legalPerson.name}" size="50" />
                        <p:commandButton id="specifyLegalPerson" image="ui-icon ui-icon-search" onclick="legalPersonDlgVar.show();" type="button" styleClass="button" />
                        <p:commandButton action="#{enterpriseObjectBean.removeLegalPerson}" immediate="true" update="messages,lovLegalPersonValue" image="ui-icon ui-icon-close" title="#{msgs['button.delete.title']}" />
                    </h:panelGroup>

                    <h:outputLabel for="pvdRegistrationNumber" value="#{msgs['EnterpriseObject.pvdRegistrationNumber']}" />
                    <h:inputText id="pvdRegistrationNumber" label="#{msgs['EnterpriseObject.pvdRegistrationNumber']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.pvdRegistrationNumber}" size="20" />

                    <h:outputLabel for="pvdAcceptanceNumber" value="#{msgs['EnterpriseObject.pvdAcceptanceNumber']}" />
                    <h:inputText id="pvdAcceptanceNumber" label="#{msgs['EnterpriseObject.pvdAcceptanceNumber']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.pvdAcceptanceNumber}" size="20" />

                    <h:outputLabel for="pvdRegistrationDate" value="#{msgs['EnterpriseObject.pvdRegistrationDate']}" />
                    <p:calendar id="pvdRegistrationDate"  value="#{enterpriseObjectBean.enterpriseObject.pvdRegistrationDate}" locale="lv" showOn="button" styleClass="dateField" pattern="dd-MM-yyyy" />

                    <h:outputLabel for="pvdRegisterReference" value="#{msgs['EnterpriseObject.pvdRegisterReference']}" />
                    <h:inputText id="pvdRegisterReference" label="#{msgs['EnterpriseObject.pvdRegisterReference']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.pvdRegisterReference}" size="20" />

                    <h:outputLabel for="vcidacRegisterReference" value="#{msgs['EnterpriseObject.vcidacRegisterReference']}" />
                    <h:inputText id="vcidacRegisterReference" label="#{msgs['EnterpriseObject.vcidacRegisterReference']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.vcidacRegisterReference}" size="20" />

                    <h:outputLabel for="country" value="#{msgs['EnterpriseObject.country']}" />
                    <h:selectOneMenu id="country" label="#{msgs['EnterpriseObject.country']}" value="#{enterpriseObjectBean.enterpriseObject.cntCntId}" >
                        <f:selectItems value="#{enterpriseObjectBean.clCountries}" var="cnt" itemValue="#{cnt.id}" itemLabel="#{cnt.name}"/>
                    </h:selectOneMenu>

                    <h:outputLabel for="representative" value="#{msgs['EnterpriseObject.representative']}" />
                    <h:inputText id="representative" label="#{msgs['EnterpriseObject.representative']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.representative}" required="true" size="50" />

                    <h:outputLabel for="phone" value="#{msgs['EnterpriseObject.phone']}" />
                    <h:inputText id="phone" label="#{msgs['EnterpriseObject.phone']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.phone}" size="10" />

                    <h:outputLabel for="fax" value="#{msgs['EnterpriseObject.fax']}" />
                    <h:inputText id="fax" label="#{msgs['EnterpriseObject.fax']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.fax}" size="10" />

                    <h:outputLabel for="email" value="#{msgs['EnterpriseObject.email']}" />
                    <h:inputText id="email" label="#{msgs['EnterpriseObject.email']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.email}" size="30" />

                    <h:outputLabel for="atvkCode" value="#{msgs['EnterpriseObject.atvkCode']}" />
                    <h:panelGroup id="lovAtvkCode">
                        <h:inputText id="atvkCode" label="#{msgs['EnterpriseObject.atvkCode']}" disabled="true"
                                     value="#{enterpriseObjectBean.enterpriseObject.address.atvkCode}" size="50" />
                        <p:commandButton disabled="true" image="ui-icon ui-icon-search" onclick="atvkCodeDlgVar.show();" type="button" styleClass="button" />
                        <p:commandButton disabled="true" action="#{enterpriseObjectBean.removeAtvkCode}" immediate="true" update="messages,lovAtvkCode" image="ui-icon ui-icon-close" title="#{msgs['button.delete.title']}" />
                    </h:panelGroup>

                    <h:outputLabel for="addressLine1" value="#{msgs['EnterpriseObject.addressLine1']}" />
                    <h:inputText id="addressLine1" label="#{msgs['EnterpriseObject.addressLine1']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.addressLine1}" size="50" />

                    <h:outputLabel for="addressLine2" value="#{msgs['EnterpriseObject.addressLine2']}" />
                    <h:inputText id="addressLine2" label="#{msgs['EnterpriseObject.addressLine2']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.addressLine2}" size="50" />

                    <h:outputLabel for="addressLine3" value="#{msgs['EnterpriseObject.addressLine3']}" />
                    <h:inputText id="addressLine3" label="#{msgs['EnterpriseObject.addressLine3']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.addressLine3}" size="50" />

                    <h:outputLabel for="postCode" value="#{msgs['EnterpriseObject.postCode']}"  />
                    <h:inputText id="postCode" label="#{msgs['EnterpriseObject.postCode']}"
                                 value="#{enterpriseObjectBean.enterpriseObject.postCode}" size="10" />

                </h:panelGrid>
            </p:panel>
            <p:commandButton id="saveButton" ajax="false" update="messages" action="#{enterpriseObjectBean.saveEnterpriseObject}" value="#{msgs['button.save']}" />
            <p:commandButton id="cancelButton" immediate="true" ajax="false" action="#{enterpriseObjectBean.cancel}" value="#{msgs['button.cancel']}" />
        </h:form>
        <!-- ***************************** Legal Person LOV ***************************** -->

        <h:form id="formLegalPerson">
            <p:dialog id="legalPersonDlg" header="#{msgs['LegalPerson.list.name']}" widgetVar="legalPersonDlgVar" resizable="false" modal="true" width="750" >
                #{msgs['LegalPerson.name']}: <h:inputText value="#{legalPersonBean.legalPersonForSearch.name}"  id="legalPersonFilter" size="50"/>
                <p:commandButton value="#{msgs['button.search']}" ajax="true" action="#{legalPersonBean.resetLazyModel}" update="messages,lovLegalPersonValue" />
                <p:dataTable id="legalPersonsTable" var="legalPerson" value="#{legalPersonBean.lazyModel}" paginator="true" rows="15" lazy="true"
                             currentPageReportTemplate="#{msgs['Misc.currentPageTemplate']}"
                             paginatorTemplate="#{msgs['Misc.paginatorTemplate']}"
                             rowsPerPageTemplate="#{msgs['Misc.rowsPerPage']}"
                             selection="#{enterpriseObjectBean.enterpriseObject.legalPerson}" selectionMode="single"
                             update="messages,enterpriseObjectForm:lovLegalPersonValue"
                             onRowSelectComplete="legalPersonDlgVar.hide()" >

                    <f:facet name="header">
                        <h:outputText value="#{msgs['LegalPerson.list.name']}" styleClass="tableHeader" />
                    </f:facet>

                    <p:column sortBy="#{legalPerson.name}">
                        <f:facet name="header">
                            <h:outputText value="#{msgs['LegalPerson.name']}" />
                        </f:facet>
                        <h:outputText value="#{legalPerson.name}" />
                    </p:column>

                </p:dataTable>
            </p:dialog>
        </h:form>

    </ui:define>
</ui:composition>
LegalPersonBean

Code: Select all

package lv.alise.junda.web;

import lv.alise.junda.mybatis.IbatisTableModel;
import java.sql.SQLException;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import lv.alise.junda.mybatis.bo.LegalPerson;
import org.apache.log4j.Logger;
import org.primefaces.model.LazyDataModel;
import org.springframework.context.annotation.Scope;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;

@Named
@Scope(WebApplicationContext.SCOPE_SESSION)
public class LegalPersonBean extends BaseBean {
    private static Logger log = Logger.getLogger(LegalPersonBean.class);

    private static final String redirToList = "legalPersonList?faces-redirect=true";
    private static final String redirToEdit = "legalPerson?faces-redirect=true";

    private LegalPerson legalPerson;
    private LegalPerson legalPersonForSearch;
    private LazyDataModel lazyModel;


    public void setLegalPerson(LegalPerson legalPerson) {
        this.legalPerson = legalPerson;
    }

    public LegalPerson getLegalPerson() {
        return legalPerson;
    }

    public LegalPerson getLegalPersonForSearch() {
        if (legalPersonForSearch == null) {
            legalPersonForSearch = new LegalPerson();
        }
        return legalPersonForSearch;
    }

    public void setLegalPersonForSearch(LegalPerson legalPersonForSearch) {
        this.legalPersonForSearch = legalPersonForSearch;
    }

    public String onRowSelectNavigate() {
        return redirToEdit;
    }

    @Transactional(rollbackFor = Throwable.class)
    //@RolesAllowed(Roles.ADM)
    public String saveLegalPerson() throws SQLException {
        if (legalPerson.getId() == null) {
            log.debug("Inserting legalPerson");
            sqlMap.insert("insertLegalPerson", legalPerson);
        } else {
            log.debug("Updating legalPerson");
            sqlMap.update("updateLegalPerson", legalPerson);
        }
        fMessages.addMessage(null, FacesMessage.SEVERITY_INFO, "Info.saved", null);
        return redirToList;
    }

    @Transactional(rollbackFor = Throwable.class)
    public String deleteLegalPerson() throws SQLException {
        log.debug("Deleting legalPerson");

        sqlMap.delete("deleteLegalPerson", legalPerson);
        ((List) lazyModel.getWrappedData()).remove(legalPerson);
        fMessages.addMessage(null, FacesMessage.SEVERITY_INFO, "Info.deleted", null);
        return redirToList;
    }

    public String cancel() {
        return redirToList;
    }

    public String addLegalPerson() {
        legalPerson = new LegalPerson();
        return redirToEdit;
    }

    public String resetLazyModel(){
        lazyModel = null;
        return "";
    }

    public String searchLegalPerson() {
        lazyModel = null;
        return redirToList;
    }

    public String clearSearch() {
        legalPersonForSearch = new LegalPerson();
        return "";
    }

    public LazyDataModel getLazyModel() throws SQLException {
        if (lazyModel == null) {
            lazyModel = new IbatisTableModel(sqlMap, fMessages,
                    "searchLegalPersons", "countLegalPersons", getLegalPersonForSearch());
        }
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel lazyModel) {
        this.lazyModel = lazyModel;
    }
}
I hope I was clear enough, if you have some questions or you need some additional code please ask..

Thank you in advance!

callahan
Posts: 768
Joined: 27 May 2010, 22:52

13 Oct 2010, 11:27

Hi,

This source of this issue is probably the dataTable and lazy loading. See: http://primefaces.prime.com.tr/forum/vi ... f=3&t=4436

v.yagodin
Posts: 4
Joined: 30 Sep 2010, 19:57

13 Oct 2010, 15:45

The scope is session in all backing beans. So it is wider than request.

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 44 guests