Groovy Grails垂直而不是水平显示列表

Groovy Grails垂直而不是水平显示列表,grails,groovy,Grails,Groovy,我试图在Groovy服务器页面(GSP)上垂直显示项目列表,而不是水平显示。目前,我的列表水平显示。情况如下: 示例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 ]

我试图在Groovy服务器页面(GSP)上垂直显示项目列表,而不是水平显示。目前,我的列表水平显示。情况如下:

示例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),我执行了以下操作:

<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>
在我的控制器中,我定义了一个简单的列表:

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吗


提前感谢您的帮助。

您应该能够做到:

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

您应该能够做到:

list.collate( 3 ).transpose().flatten()
在控制器中:

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>

${item}
在控制器中:

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>

${item}

问题,蒂姆:在输出列表之前,我把上面的代码放在我的控制器中,我似乎得到了与“示例1”相同的结果。我是不是太密集了,还是为了让它像例2那样工作,我做的不对?@meoww-
list=list.collate(3).transpose().flatte()
应该使列表相等
[A,D,G,J,B,E,H,K,C,F,I,L]
问题,蒂姆:在输出列表之前,我把上面的代码放在我的控制器中,我似乎得到了与我的“示例1”相同的结果。我只是为了让它像示例2那样工作,或者我做得不对吗?@meoww-
list=list.collate(3).transpose().flatte()
应该使列表相等
[A,D,G,J,B,E,H,K,C,F,I,L]
谢谢詹姆斯。我也喜欢这个解决方案。谢谢你把它贴在这里。干杯汉克·詹姆斯。我也喜欢这个解决方案。谢谢你把它贴在这里。干杯