JSTL - 模数返回异常 - 由(#2)引起:java.lang.ArithmeticException:/ by zero

时间:2013-01-07 17:28:15

标签: java jsp jstl

在我的下面的代码中,它返回一个来自第3列的异常。是否有更好的方法来编写此逻辑以防止发生异常?这是正在发生的异常:由(#2)引起:java.lang.ArithmeticException:/ by zero

以下是可能导致问题的代码:因此所有客户都显示大于“0”的数字,因此使用了第一个语句。在某些情况下,在其他声明中有客户返回为“0”。因此,使用模数,您不能将数字除以“0”,因此会抛出异常。写这个陈述的更好方法是什么?

<c:choose>
       <c:when test="${total%columns != 0}">
           <c:set var="columnL" value="${total/columns + 1}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:when>
       <c:otherwise>
           <c:set var="columnL" value="${total/columns}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:otherwise>
   </c:choose>

按要求添加DEBUG: 1. $ {总列数!= 0}
2. $ {总计/列数+ 1}
3. $ {总计/栏数}

添加了调试,1节将回来: 真的, 2. 11.333333333333334, 3. 10.333333333333334

另一部分又回来了:(这就是造成这个问题的原因) 虚假的 2. 9.0, 3. 8.0

正如您所注意到的那样,两者之间正在生成浮点数,导致异常。

这是完整代码的概述。

<dsp:page>

   <c:set var="total" value="${fn:length(customers)}"/>
   <c:set var="columns" value="3"/>
   <c:set var="cCount" value="1"/>
   <c:choose>
       <c:when test="${total%columns != 0}">
           <c:set var="columnL" value="${total/columns + 1}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:when>
       <c:otherwise>
           <c:set var="columnL" value="${total/columns}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:otherwise>
   </c:choose>

   <c:forEach begin="1" end="${columns}" var="cCount" varStatus="status">
   <c:set var="begin" value="${(cCount -1) * columnL}"/>
   <c:choose>
       <c:when test="cCount == columns">
           <c:set var="end" value="${total - 1}"/>
       </c:when>
       <c:otherwise>
           <c:set var="end" value="${(cCount) * columnL - 1}"/>
       </c:otherwise>
   </c:choose>
       <div id="dColumn${cCount}" class="dCol">
       <c:set var="cCount" value="${cCount+1}"/>
       <c:forEach items="${customers}" begin="${begin}" end="${end}" var="customer"    varStatus="status">
       <div class="link">
               <nm:a href="${customer.templateURL}">
                   <dsp:param name="param1" value="${customer.id}" />
                   <dsp:param name="param2" value="${customer.parentId}" />
                   <dsp:param name="param3" value="${customer.masterId}" />

               </nm:a>
           </div>
       </c:forEach>
       </div>
   </c:forEach>
   </dsp:page>

0 个答案:

没有答案