2013-01-17 72 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