2017-08-08 3 views
0

Ok ci-dessous est le code que j'ai. Ici, nous lisons une carte à partir d'un objet JAVA et remplissons des colonnes en fonction de la clé et des valeurs de la carte. La carte d'objet Java est de la formeDiviser une table en plusieurs tables basées sur des colonnes en utilisant la vélocité

HashMap<HashMap<String, Object>>.

La table requise aura des colonnes égales au nombre de hashmap externe. Le nombre de lignes sera égal au nombre de Sting/Objects dans le hashmap interne.

Voici le code qui génère la table. Comme décrit ci-dessus, le nombre de colonnes dans la table dépendra des valeurs de l'objet java. Le problème auquel nous sommes confrontés est que, si la valeur de hashmap est supérieure à 10, la génération PDH résultera en perte de données.

<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> 

Attente: Est-il possible d'avoir la répartition des données dans différentes tables à chaque fois que la valeur de la colonne atteint plus de 3?

donc par exemple envisager un scénario dans lequel la table ressemble

  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 

Comment peut-on diviser cela comme

  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

Qu'est-ce que ConfirmationObject? –

+0

@MauricePerry: c'est juste le nom de la collection java de la forme hashmap > –

+0

OK, alors quelles sont les méthodes getAllLegs et getLegMap? –

Répondre

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 

Ici, nous avons écrit une méthode Java getGrouplLegSet ($ group, $ maxCols). La méthode retournerait juste le sous-ensemble de hashmap basé sur le groupe et les maxCols. Par exemple, si le groupe est 0 alors les valeurs de 0 à 2 seront retournées, si la valeur du groupe est 1 alors la sous-carte de 3 à 5 sera retournée et ainsi de suite.

1

Vous pouvez essayer quelque chose comme ça:

#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

Merci mille fois pour votre aide/conseils. Votre réponse n'a pas résolu mon problème, mais elle m'a donné assez d'indices pour finalement trouver une solution. Donc, je vais toujours accepter votre réponse. Collé ci-dessous est ma solution en modifiant votre morceau de code. Merci encore mon pote –