2013-03-10 4 views
0

Я пытаюсь отобразить список элементов на странице сервера Groovy (GSP) вертикально, а не горизонтально. В настоящее время мой список отображается горизонтально. Это выглядит следующим образом:Groovy Grails Отображение списка по вертикали, а не по горизонтали

Пример 1

[ A ] [ B ] [ C ] 
[ D ] [ E ] [ F ] 
[ G ] [ H ] [ I ] 
[ J ] [ K ] [ L ] 

Вместо отображения этого списка по горизонтали, я хотел бы мой список появляться вертикально или в следующем порядке:

Пример 2: То, что я надеюсь достичь

[ A ] [ E ] [ I ] 
[ B ] [ F ] [ J ] 
[ C ] [ G ] [ K ] 
[ D ] [ H ] [ L ] 

для достижения тыс е отображение горизонтального списка (пример 1), я сделал следующее:

В моем контроллере, у меня есть простой список определяется:

def test() { 
    def list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'] 
    [items: list] 
} 

И на моей странице test.gsp, у меня есть следующие:

<table> 
     <tr> 
      <% 
      def counter = 0 

      for (i in items) { 
      counter = counter+1 

      println("<td>" + i + "</td>") 

      if (counter == 3) { 
       println("</tr><tr>") 
       counter = 0 
      } 
     } 
     %> 
    </tr> 
</table> 

Кто-нибудь знает, как я могу сделать свой список похожим на пример 2?

Заранее за вашу помощь.

ответ

3

Вы должны быть в состоянии сделать:

list.collate(3).transpose().flatten() 
+0

Вопрос, Тим: Я поставил выше код в моем контроллер, прежде чем выводить список, и я, похоже, получаю то же самое, что и в моем примере «Пример 1». Я просто плотный или есть что-то, что я не делаю правильно, чтобы заставить его работать, как в примере 2? –

+0

@ meoww- 'list = list.collate (3) .transpose(). Flatten()' должен сделать список равным '[A, D, G, J, B, E, H, K, C, F, I, L] ' –

+0

Спасибо Тим. Я знал, что делаю это неправильно. Cheers –

1

В контроллере:

List list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'] 
int size = list.size() 
int modVal = 3 

[items: list.collate((size/modVal).toInteger()).transpose().flatten(), modVal: modVal] 

В представлении:

<tr> 
    <g:each in="${items}" var="item" status="i"> 
    <g:if test="${i % modVal == 0 && i != 0}"> 
     </tr><tr> 
    </g:if> 
    <td>${item}</td> 
    </g:each> 
</tr> 
+0

Спасибо, Джеймс. Мне тоже нравится это решение. Я ценю, что вы разместили его здесь. ура –

Смежные вопросы