Как сделать карту в виде Grails - PullRequest
2 голосов
/ 21 декабря 2011

Допустим, у меня есть такая карта (которая возвращается из контроллера)

    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..

Редактировать:

Я сделал что-то подобное в конкретном случае отображения деталей (с подсказкой, полученной из ответа, данного Антуаном ):

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

9 голосов
/ 21 декабря 2011

Вы можете перебирать элементы карты, используя g:each.Метод 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>

На основании вашего форматирования я пришел к выводу, что вы хотите представить свою карту каксписок списков, отсюда и вложенные элементы <ul>.

1 голос
/ 21 декабря 2011

В вашем контроллере замените последнюю строку действия allTasks:

[tasksByDate]

... по ...

[tasksByDate : tasksByDate]

Возвращением действия контроллера (насколько я знаю) должна быть карта, а не список. Ключ - это имя переменной, которую вы получите в GSP, значение - это содержимое этой переменной.

См. http://grails.org/doc/latest/guide/single.html#controllers, главу 6.1.3 Модели и виды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...