【问题标题】:How do I render a map in Grails view如何在 Grails 视图中渲染地图
【发布时间】:2011-12-21 18:55:10
【问题描述】:

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

    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]
    }

我哪里出错了?

提前致谢。

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    您可以使用g:each 遍历地图元素。 map 元素的 key 方法将返回键(在您的示例中为 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>
    

    根据您的格式,我推断您希望将地图显示为列表列表,因此嵌套了 &lt;ul&gt; 元素。

    【讨论】:

    • 即使我试过也只有这样......但我的屏幕上没有任何输出......我已经用一个案例更新了我的问题
    【解决方案2】:

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

    [tasksByDate]
    

    ...通过...

    [tasksByDate : tasksByDate]
    

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

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

    【讨论】:

    • 那么现在我需要如何更改我的视图 (.gsp) 文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多