2013-01-17 70 views
0

我有这样的总计算各列的JSTL

  01 jan 02 jan 03 jan ... total 

user1 3  5  10   18 
user2 5  6  9   20 
. 
. 
. 
total ?  ?  ?   38 

我能够每行总在结束使用JSTL我的代码calulate的报告。我没有找到用'?'计算结束标记总计的方法。

对于行总我使用像

<c:forEach var="colNames" items="${listOfRecords}"> 
    <tr> 
     <td>${colNames.key}</td> 
     <c:set var="htotal" value="0" /> 
     <c:forEach var="noOfTasks" items="${colNames.value}" varStatus="status"> 
      <td>${noOfTasks.value}</td> 
      <c:set var="htotal" value="${htotal+noOfTasks.value}" /> 
     </c:forEach> 
     <td class="foo">${htotal}</td> 
    </tr> 
</c:foreach> 

这里${listOfRecords}HashMap<String, HashMap<String, Integer>>

我该如何做到这一点?

+0

“hashmap [String,[String,Integer]]”是什么意思?也许这个'HashMap >'? –

+0

是它的HashMap >,因为它不显示它,如果我把 user965884

+0

我认为你的colNames实际上是rowNames,或者我误会了吗? –

回答

3

这是我已经能够拿出:

<jsp:useBean id="column_totals" class="java.util.LinkedHashMap" scope="page"/> 
<c:forEach var="row" items="${listOfRecords}"> 
    <tr> 
     <td>${row.key}</td> 
     <c:set var="row_total" value="0"/> 
     <c:forEach var="column" items="${row.value}"> 
      <td>${column.value}</td> 
      <c:if test="${empty column_totals[column.key]}"> 
       <c:set target="${column_totals}" property="${column.key}" value="0"/> 
      </c:if> 
      <c:set target="${column_totals}" property="${column.key}" value="${column_totals[column.key] + column.value}"/> 
      <c:set var="row_total" value="${row_total + column.value}" /> 
     </c:forEach> 
     <td class="foo">${row_total}</td> 
    </tr> 
</c:foreach> 
<tr> 
    <td>total</td> 
    <c:forEach var="column_total" items="${column_totals}"> 
    <td>${column_total.value}</td> 
    </c:forEach> 
</tr> 

不得不改变一些名字,因为我无法与你理解对不起。

我认为它应该工作。

+2

不幸的是,你不能在''中使用EL。另请参见[tlddoc](http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/set.html)(“requesttime”表示“false”,因此不允许EL)。我会使用一个'技巧。 – BalusC

+0

@BalusC你说得对:/改变它为一个地图,你现在怎么看? –

+3

看起来合法。但是,当您直接在总数中迭代映射值而不是通过有序键集获取它们时,最好使其成为'LinkedHashMap'来维护插入顺序。 – BalusC