2

我正在使用 struts 迭代器来显示我的数组列表,我必须在end迭代器标记的属性中放置一个条件。两个整数相除时如何获得 CEIL 值。如果数组列表大小为 3,那么我需要将 end 属性的输出为 2

<s:iterator var="counter" begin="0" end="arraylist.size()/2 " >
   /*my code...*/
</s:iterator> 
4

3 回答 3

0

因为size方法返回类型是int并且最终的end属性<s:iterator>将被强制转换为Integer您可以简单1地在划分之前添加到数组列表的大小,并且您得到与使用相同的结果Math.ceil

<s:iterator var="counter" begin="0" end="(arraylist.size()+1)/2">

</s:iterator>



顺便说一句,如果您决定启用struts.ognl.allowStaticMethodAccess不推荐的方法并使用JSPMath.ceil中的方法,您需要表明您正在除以一个双精度值(例如2d),否则它将int在传递给之前转换为ceil.

<s:iterator var = "counter" begin = "0" 
            end = "@java.lang.Math@ceil(arraylist.size()/2d)">

</s:iterator> 
于 2014-04-09T16:28:13.600 回答
0

在 struts.xml 中

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/> 

现在可以调用静态方法了;如此处所述的语法将是:

@java.lan.Math@ceil()

接着

<s:iterator var = "counter" 
          begin = "0" 
            end = "%{@java.lang.Math@ceil(arraylist.size()/2)}" >

</s:iterator> 

显然,您需要在操作中使用这样命名的属性(命名选择根本不好,如果它是真实姓名)

private List<Object> arraylist;

显然它的吸气剂 ( getArraylist()) 。

于 2014-04-09T08:32:26.530 回答
0

当两个整数相除时,你得到一个有理数。因此,要摆脱小数部分,您可以将其转换为int.

int length = (int) arraylist.size()/2;

在您的迭代器中使用此结果。

于 2014-04-09T13:01:18.837 回答