2012-12-28 67 views
2

我想知道是否有一種很好的方法來將Map呈現給.gsp頁面內的HTML表格。有沒有辦法在Grails中將Map映射爲HTML表格?

一個例子Map

def map = ['Mammals':['Unicorn','Chimpanzee','Goat'], 
        'Reptiles':['Snake','Turtle']]; 

這將使到這樣的事情:

<table> 
    <thead> 
    <tr> 
     <th>Mammals</th> 
     <th>Reptiles</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td>Unicorn</td> 
     <td>Snake</td> 
    </tr> 
    <tr> 
     <td>Chimpanzee</td> 
     <td>Turtle</td> 
    </tr> 
    <tr> 
     <td>Goat</td> 
     <td></td> 
    </tr> 
    </tbody> 
</table> 

理想的情況下,我可以再創建自己的自定義標籤,所以我可以這樣做:

<stackOverflow:tablizer map="${map}" /> 
+0

您將有創建您自己的標籤。不應該那麼辛苦。 –

+0

@JamesKleeh right-o!我正在尋找一些有關impl的幫助。 –

+0

地圖必須具有唯一的密鑰btw ..這是無效的 –

回答

3

就像這樣 - 可能是更好的方式來做到這一點,但這是我第一次想到的。

def mapToTable = { attrs -> 

StringBuilder output = new StringBuilder() 

if (attrs.map instanceof Map) 
{ 
    Map map = attrs.map 

    if (map.size() > 0) 
    { 
     output.append("<table><thead><tr>") 

     ArrayList[] values = map.values() 

     int max = values.collect{it.size()}.max() 


     map.each { key, val -> 
      output.append("<th>${key}</th>") 
     } 

     output.append("</tr></thead><tbody>") 

     (1..max).each { num -> 
      output.append("<tr>") 

      values.each { 

       if (it.size() >= num ) 
       { 
        output.append("<td>${it.get(num-1)}</td>")  
       } 
       else 
       { 
        output.append("<td></td>") 
       } 
      }  

      output.append("</tr>") 
     } 

     output.append("</tbody></table>") 
    } 

} 
out << output 
} 
+0

非常好,我的朋友! –

0

比如你在Groovy的Sql結果得到的是什麼我不能@詹姆斯Kleeh的回答發表評論,但我修改了他的代碼來打印地圖,列表:

protected String mapToTable(List<Map> list) { 

    StringBuilder output = new StringBuilder() 

    Map first = list.first() 

    output.append("<table><thead><tr>") 

    first.each { key, val -> 
     output.append("<th>${key}</th>") 
    } 

    output.append("</tr></thead><tbody>") 

    list.each { map -> 
     if (map.size() > 0) { 

      def values = map.values() 

      output.append("<tr>") 

      values.each { 
       output.append "<td>${it}</td>" 
      } 

      output.append("</tr>") 
     } 
    } 
    output.append("</tbody></table>") 

    output.toString() 
} 
相關問題