我正在使用 struts 迭代器来显示我的数组列表,我必须在end
迭代器标记的属性中放置一个条件。两个整数相除时如何获得 CEIL 值。如果数组列表大小为 3,那么我需要将 end 属性的输出为 2
<s:iterator var="counter" begin="0" end="arraylist.size()/2 " >
/*my code...*/
</s:iterator>
因为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>
在 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()
) 。
当两个整数相除时,你得到一个有理数。因此,要摆脱小数部分,您可以将其转换为int
.
int length = (int) arraylist.size()/2;
在您的迭代器中使用此结果。