2

我想知道是否有一种很好的方法可以将 a 呈现Map到页面内的 HTML 表格中.gsp

一个例子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}" />
4

2 回答 2

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
}
于 2012-12-28T20:13:51.067 回答
0

我无法评论@James Kleeh 的回答,但我修改了他的代码以打印地图列表,例如您从 Groovy Sql 结果中返回的内容:

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()
}
于 2015-08-26T17:04:44.787 回答