有趣的是JSTL循环和int转换为char

时间:2011-11-10 23:15:57

标签: jsp jstl el

我需要的是一个使用jstl的jsp,它将列标签输出为Chars(A,B,C ...)而不是ints(1,2,3 ......),只是为了好玩,当int是如果大于26,则输出AA,AB,AC ...哦,当int大于52时,它应该是BA,BB,BC ......并且一直打开。

excel如何标记列。

我现在的工作正常,直到索引达到27。

<c:forEach var="column" items="${vo.dataFormat.columns}" varStatus="loopStatus">
    <div class="columnLabel">&#${loopStatus.index + 65};</div>
</c:forEach>

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的初始要求..., X, Y, Z, AA, BB, CC, ...很简单:

<c:forEach items="${vo.dataFormat.columns}" var="column" varStatus="loop">
    <div class="columnLabel">
        <c:forEach begin="1" end="${loop.index / 26 + 1}">
            &#${loop.index % 26 + 65};
        </c:forEach>
    </div>
</c:forEach>

您编辑的要求..., X, Y, Z, AA, AB, AC, ...更棘手。这只适用于ZZ:

<c:forEach items="${vo.dataFormat.columns}" var="column" varStatus="loop">
    <div class="columnLabel">
        <c:set var="i" value="${fn:substringBefore(loop.index / 26, '.')}" />
        <c:if test="${i > 0}">
            &#${i + 64};
        </c:if>
        &#${loop.index % 26 + 65};
    </div>
</c:forEach>

由于JSTL中没有while循环,因此无法使用干净的代码从ZZ进入AAA等等。