2017-08-08 46 views
0

好的下面是我的代碼。在這裏,我們從JAVA對象讀取映射,並根據映射的鍵和值填充列。 Java對象映射的形式爲根據使用速度的列將一張表分成多個表格

HashMap<HashMap<String, Object>>

所需表格的列數等於外部散列表的數量。行數將等於內部散列表中Sting/Objects的數量。

以下是生成表的代碼。如上所述,表中的列數將取決於java對象中的值。我們面臨的問題是,如果hashmap中的值超過10,那麼PDH生成會導致數據丟失。

<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0"> 
    #set ($allLegs = $ConfirmationObject.getAllLegs()) 
    #set ($i = 1) 
    <tr> 
     <td valign="top" width="30%"> </td> 
      #foreach($legSzie in $allLegs.keySet()) 
       <td valign="top" width="30%" align="left"><b>Leg $i</b></td> 
       #set ($i=$i+1) 
      #end 
      <tr><td></td></tr> 
      <td valign="top" width="10%" align="right">&nbsp;</td> 
    </tr> 

    <td colspan="1"> 
     <table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0"> 
      #set ($map = $ConfirmationObject.getLegMap(1)) 
      #foreach($key in $map.keySet()) 
        <tr> 
        <td valign="top" width="60%">$key </td> 
        </tr> 
      #end 
     </table> 
    </td> 

    #foreach($legString in $allLegs.keySet()) 
     <td colspan="1"> 
      <table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0"> 
       #set ($legMap = $allLegs.get($legString)) 
       #foreach($legKey in $legMap.keySet()) 
        <tr> 
         <td >$legMap.get($legKey)</td> 
        </tr> 
       #end 
      </table> 
     </td> 
    #end 
    </table> 

後市展望: 是否有可能有數據拆分成不同的表有史以來列值達到3個以上的時候?

因此,例如,考慮這樣一個場景,該表看起來像

  LEG 1  LEG 2  LEG 3  LEG 4  LEG 5 
A   12   13   14   15   16 
B   12   13   14   15   16   
C   12   13   14   15   16 
D   12   13   14   15   16 
E   12   13   14   15   16 

我們如何拆分此類似

  LEG 1  LEG 2  LEG 3   
A   12   13   14   
B   12   13   14      
C   12   13   14   
D   12   13   14   
E   12   13   14 




      LEG 4  LEG 5  
A   15   16     
B   15   16        
C   15   16      
D   15   16     
E   15   16 
+0

什麼是ConfirmationObject? –

+0

@MauricePerry:多數民衆贊成在收集的形式hashmap > –

+0

確定,那麼getAllLegs和getLegMap的方法是什麼? –

回答

1
#set ($allLegs = $ConfirmationObject.getAllLegs()) 
    #set ($columns = $allLegs.keySet()) 
    #set ($maxCols = 3) 
    #set ($groups = ($columns.size() + $maxCols - 1)/$maxCols) 
    #set ($lastGroup = $groups - 1) 

    #foreach ($group in [0..$lastGroup]) 
    #if($group >0) 
    <br> 
    <br> 
    #end 
    <table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0"> 
    #set ($allLegs = $ConfirmationObject.getAllLegs()) 
    #set ($i = (($group*$maxCols)+1)) 
    #set ($groupLegs = $ConfirmationObject.getGrouplLegSet($group, $maxCols)) 

    <tr> 
     <td valign="top" width="30%"> </td> 
     #foreach($legSzie in $groupLegs.keySet()) 
     <td valign="top" width="30%" align="left"><b>Leg $i</b></td> 
     #set ($i=$i+1) 
     #end 
     <td></td> 
     <td valign="top" width="10%" align="right">&nbsp;</td> 
    </tr> 

    <td colspan="1"> 
     <table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0"> 
     #set ($map = $ConfirmationObject.getLegMap(1)) 
     #foreach($key in $map.keySet()) 
     <tr> 
     <td valign="top" width="60%">$key </td> 
     </tr> 
     #end 
     </table> 
    </td> 

    #foreach($legString in $groupLegs.keySet()) 
    <td colspan="1"> 
     <table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0"> 
     #set ($legMap = $allLegs.get($legString)) 
     #foreach($legKey in $legMap.keySet()) 
     <tr> 
     <td >$legMap.get($legKey)</td> 
     </tr> 
     #end 
     </table> 
    </td> 
    #end 
    </table> 
#end 

這裏我們寫了一個java方法getGrouplLegSet($ group,$ maxCols)。該方法只會返回基於組和maxCols的hashmap的子集。因此,例如,如果組爲0,則返回0到2之間的值,如果組值爲1,則將返回從3到5的子映射,依此類推。

1

你可以嘗試這樣的事情:

#set ($columns = $allLegs.keySet().toArray()) 
#set ($maxCols = 3) 
#set ($groups = ($columns.size() + $maxCols - 1)/$maxCols) 
#set ($lastGroup = $groups - 1) 
#foreach ($group in [0..$lastGroup]) 
    <table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0"> 
    #set ($firstCol = $maxCols*$group) 
    #set ($lastCol = $firstCol + $maxCols - 1) 
    #if ($lastCol >= $columns.size()) 
     #set ($lastCol = $columns.size() - 1) 
    #end 
     <tr> 
      <th></th> 
    #foreach ($col in [$firstCol..$lastCol]) 
      <th>$columns[$col]</th> 
    #end 
     </tr> 

    #set ($rows = $allLegs.get($columns[$firstCol]).keySet()) 
    #foreach($row in $rows) 
     <tr> 
      <th>$row</th> 
    #foreach ($col in [$firstCol..$lastCol]) 
     #set ($legMap = $allLegs.get($columns[$col])) 
      <td>$legMap.get($row)</td> 
    #end 
     </tr> 
    #end 
</table> 

#end 
+0

非常感謝您的幫助/指導。你的回答並沒有完全解決我的問題,但它給了我足夠的提示,最終達成解決方案。所以我仍然會接受你的回答。粘貼在下面是我的解決方案,通過修改你的代碼段。再次感謝好友 –

相關問題