在Grails中渲染地图的最佳方式

时间:2014-05-07 16:01:53

标签: grails groovy maps

我是groovy和grails的新手,因此这个简单的怀疑。我有这样的地图:[0:[A,B,C,D],1:[a,b,c,d]]。我想按如下方式显示:
A:a
B:b
C:C:D:d

如何显示数据列明智?我现在的.gsp如下所示,它所做的只是按行显示值。

 <!DOCTYPE html>
<html>
    <head>
        <meta name="layout" content="main">
        <title>Parsed Map</title>
    </head>
    <body>      
        <table>
            <g:each in="${myMap}" var="element">
                <tr>
                    <g:each in="${element.value }" >
                            <th>${it}</th>
                         </g:each>

                    </tr>
                </g:each>
        </table>                
    </body>
</html>

指出我正确的方向来理解groovy中的地图也将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

假设您已经验证了列和标题列表具有相同数量的元素,您可以执行以下操作...

<html>
    <head>
        <meta name="layout" content="main">
        <title>Parsed Map</title>
    </head>
    <body>
        <table>
            <g:each var="heading" in="${headings}" status="counter">
                <tr>
                    <th>${heading}</th>
                    <td>${values[counter]}</td>
                </tr>
            </g:each>
        </table>
    </body>
</html>

答案 1 :(得分:0)

我认为您的示例是您真实问题的简化版本。根据您真正想要做的事情,您有很多选择。一个简单的事情可能是这样的(按照你喜欢的方式组织表格,但这应该给你一个想法......):

// grails-app/controllers/com/demo/DemoController.groovy
package com.demo

class DemoController {

    def index() {
        // presumably you got this Map from somewhere and it isn't hardcoded here
        def someMap = [0:['A', 'B', 'C', 'D'], 1:['a', 'b', 'c', 'd']]

        def headings = someMap[0]
        def values = someMap[1]

        [headings: headings, values: values]
    }
}


// grails-app/views/demo/index.gsp
<html>
<head>
    <meta name="layout" content="main">
    <title>Parsed Map</title>
</head>
<body>
    <table>
        <tr>
            <g:each var="heading" in="${headings}">
                <th>${heading}</th>
            </g:each>
        </tr>
        <tr>
            <g:each var="value" in="${values}">
                <th>${value}</th>
            </g:each>
        </tr>
    </table>
</body>
</html>