jstl c:foreach的步骤为0.5

时间:2015-09-16 03:06:08

标签: java jsp jstl

我在jsp中有以下代码

    <c:forEach var="starCounter" begin="1" end="5" step="1">
        <c:if test="${starCounter le averageRating}">
                <i class="glyphicon glyphicon-star"></i>
        </c:if>
        <c:if test="${starCounter gt averageRating}">
                <i class="glyphicon glyphicon-star-empty"></i>
        </c:if>
    </c:forEach>

我想将步骤更改为1但不能这样做因为当我将步骤更改为0.5时,我得到以下错误并且我的jsp没有编译

Caused by: java.lang.NumberFormatException: For input string: "0.5"

this link中所述,步骤似乎必须是&gt; = 1.

有没有办法做我想达到的目标?

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

foreach step中提到的那样,int0.5,并且根据需要,它不能像TableView那样采用双/浮点值。所以IMO不可能,

答案 1 :(得分:0)

您可以使用JSP scriplets来实现这一点:)

    <%
        for (double i = 0; i <= 5; i+=0.5) {
            if (i < averageRating) {
    %>
            <i class="glyphicon glyphicon-star"></i>
    <%
            } else {
    %>
            <i class="glyphicon glyphicon-star-empty"></i>
    <%
            }
        }
    %>

答案 2 :(得分:0)

忘记添加我的最终答案。所以这就是。我刚刚添加了另一个变量starHalfStepCounter并玩了它。

更新的代码是

<c:forEach var="starCounter" begin="1" end="5">
        <c:set var="starHalfStepCounter" value="${starCounter - 0.5}" />                                        
        <c:choose>
            <c:when test="${starCounter le averageRating}">
                <i class="glyphicon glyphicon-star"></i>
            </c:when>                                       
            <c:when test="${starCounter gt averageRating}">                                             
                <c:choose>
                    <c:when test="${starHalfStepCounter le averageRating}">                                                     
                        <i class="glyphicon glyphicon-star half"></i>
                    </c:when>
                    <c:otherwise>
                        <i class="glyphicon glyphicon-star-empty"></i>
                    </c:otherwise>                                              
                </c:choose>
            </c:when>
        </c:choose>
    </c:forEach>

答案 3 :(得分:0)

遇到了同样的问题,提出了一个简单的解决方案,代码显示了创建选择元素(从12到36)的选项,步长为.25:

<select>
<c:set value=".25" var="doubleStep" />
<c:forEach begin="${12/doubleStep}" end="${36/doubleStep}" var="step">
    <option value="${step * doubleStep}">${step * doubleStep}</option>
</c:forEach>
</select>

效果很好!