如何在Grails视图中渲染地图

时间:2011-12-21 08:15:42

标签: grails groovy

假设我有一张这样的地图(从控制器返回)

    a= [a:[1,2,3,4],b:[5,6,7,8],c:[9,10]]
   [a] //returning [a] from controller to the view

现在在Grails视图中,我应该如何渲染它们以使它们在我的浏览器中看起来像这样:

a
    -- 1
    -- 2 
    -- 3
    -- 4

b
    -- 5
    -- 6
    -- 7
    -- 8
//so on..

编辑:

我在显示详细信息的特定情况下做了类似的事情(提示来自Antoine给出的答案):

<html>
    <head>
        <title> 
            All Tasks.
        </title>
        <meta name ="layout" content="main" />
    </head>
    <body>
        <h2>All the task</h2>   
        <g:each in="${tasksByDate}" var ="tasks">
            <h4>${tasks.key}</h4>
            <g:each in="${tasksByDate.value}" var="content" >
                <div id = "todayswork"> 
                    ${content}
                </div>
                <hr/>
            </g:each>
            <br />
        </g:each>
    </body>
</html>

但是当我在浏览器中渲染它时,我只在浏览器中获得标题。像这样:

All the task
//other contents missing. . . 

我确信从控制器alltasks开始,值将传递给视图,名称为tasksByDate。正如它在我的控制台上打印一样:

[2011-12-19 14:21:35.949:[Belongs to Schedule Finish task A], 2011-12-21 14:21:35.897:[Belongs to Schedule Finish task A], 2011-12-23 14:21:35.907:[Belongs to Schedule Finish task A], 2011-12-19 14:21:36.051:[Belongs to Schedule Finish task A], 2011-12-17 14:21:36.048:[Belongs to Schedule Finish task A]]

这是我的控制器代码:

def alltasks = {
    def allTasks = DaySchedule.findAllByTaskIsNotNull()
    def tasksByDate = [:]
    tasksByDate.putAll(
        allTasks.groupBy { 
             it.Todaysdate  
        }
    )
    println tasksByDate
    [tasksByDate]
    }

我在哪里弄错了?

提前致谢。

2 个答案:

答案 0 :(得分:8)

您可以使用g:each迭代地图元素。 map元素的关键方法将返回键(示例中为a,b,c),value方法将返回关联值(在您的情况下,为整数列表)。反过来,您可以在此列表中使用g:each

以下是我将在GSP中做的事情:

<ul>
  <g:each var="mapElement" in="${a}">
    <li>$mapElement.key
      <ul>
        <g:each in="${mapElement.value}" var="number">
          <li>$number</li>
        </g:each>
      </ul>
    </li>
  </g:each>
</ul>

根据您的格式,我推断您要将地图显示为列表列表,因此嵌套的<ul>元素。

答案 1 :(得分:1)

在您的控制器中,替换allTask​​s操作的最后一行:

[tasksByDate]

... by ...

[tasksByDate : tasksByDate]

控制器动作的返回(据我所知)应该是一个地图,而不是一个列表。键是您将在GSP中检索的变量的名称,该值是该变量的内容。

参见http://grails.org/doc/latest/guide/single.html#controllers,章节6.1.3模型和视图