2011-11-10 9 views
1

私が必要とするのは、jstlを使用して列ラベルをChars(A、B、C ...)としてints(1、2、3 ...) )、ちょうど楽しみのために、intが26より大きいときは、AA、AB、ACを出力しなければなりません...そして、intが52より大きい場合、BA、BB、BC ...でなければなりません。JSTLループとint型変換を楽しいものにする

どのようにExcelが列にラベルを付けるかが正確です。インデックスはすべてのヘルプは高く評価され27

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

に当たるまで、私が今持っている何

が正常に動作します。

+0

コントローラーでこのロジックを実行し、その結果をダムJSPに渡すのは理にかなっていませんか? – skaffman

+0

26より大きい整数のAA、AB、ACを意味していませんか?それからAAA、AAB ... intよりも大きい...ええと... 702?ちょうど不思議です:) –

答えて

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になってというようにきれいなコードでは不可能である、ありませんと。

+0

いつものようにおかげでBalusは素晴らしいです! – kasdega

関連する問題