2

ページ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 に答える