У меня есть программа, которая заполняет таблицу, и в зависимости от типа значения в каждой ячейке я меняю форматирование — например, проценты, десятичные разряды, группировку и т. д.
У меня есть таблица, которая является представлением по умолчанию, и я позволяю пользователю фильтровать эти результаты, вводя номер документа, а затем таблица изменяется, добавляя 2 столбца - номер документа и соответствующее имя документа.
Итак, если число полученных столбцов равно 10, то какое-то поведение. Если если это 12, то какое-то другое поведение.
Date | Documents Bought | Documents Started | Column 4 | Column 5 03/24/2013 | 1000.0 | 2,000 | 1,500 | 2,500
является урезанной версией представления по умолчанию.
Date | Document ID| Document Name | Documents Bought | Documents Started | Column 4 | Column 5 03/24/2013| 55 | Waiver | 10 | 20 | 4 | 5
Я использую ту же программу Java для вызова запросов и заполнения таблиц. Я написал следующее в JSP.
<c:forEach var="row" items="${docFunnel}">
<tr>
<c:forEach var="cell" items="${row}"
varStatus="rowIdx">
<c:choose>
<c:when
test="${rowIdx.count==17}">
</c:when>
<c:when
test="${rowIdx.index==2}">
<td>${cell}</td>
</c:when>
<c:when
test="${rowIdx.index==1}">
<td><fmt:formatNumber
type="number" maxFractionDigits="3" groupingUsed="false"
value="${cell}" /></td>
</c:when>
<c:otherwise>
<c:choose>
<c:when
test="${rowIdx.index==0}">
<td>${cell}</td>
</c:when>
<c:otherwise>
<td>
<fmt:formatNumber
type="number" maxFractionDigits="3" groupingUsed="true"
value="${cell}" />
</td>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
</c:forEach>
</tr>
</c:forEach>
Сначала я разработал его с учетом первого случая, и я просто проверял, когда он дошел до индекса 0, чтобы напечатать ячейку как есть или использовать formatNumber. С фильтрацией и последующим добавлением двух столбцов мне пришлось переписать JSTL, и вторая версия работала идеально, но исходная версия не была полностью неправильной, группировка не отображалась, а к столбцу добавлялся «.0». номер в 3-м столбце, а группировка не отображается для 2-го столбца. С остальными столбцами в обоих случаях все в порядке. Я знаю, что это просто:
if(no. of columns == 12)
if(index == 0 || index == 2)
no format //print date and name of document as is
if(index == 1)
numberFormat with no grouping used //since this indicates document ID
else if(no. of columns == 10)
if(index == 0)
no format //print date as is
else
numberFormat with grouping //regardless of the number of columns
Но я не понимаю это правильно в JSTL. Что я делаю не так? Пожалуйста, дайте мне знать и предложите некоторые улучшения. Спасибо.