Удовольствие от зацикливания JSTL и преобразования int в char - PullRequest
1 голос
/ 11 ноября 2011

Мне нужен jsp с использованием jstl, который будет выводить метки столбцов в виде символов (A, B, C ...) вместо целых (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 Ответ

1 голос
/ 11 ноября 2011

Ваше первоначальное требование ..., 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 и т. Д. С чистым кодом невозможен.

...