FreeMarker:在一个表中显示两个列表

时间:2018-03-17 09:27:11

标签: freemarker

我的问题是这样的:

我有两个清单:

  

list ups = {up1,up2} list downs = {down1,down2,down3}

我需要一张这样的表:

      ups                        downs
  no        name           no             name    
 ${up1.no}  ${up1.name}  ${down1.no}    ${down1.name}
 ${up2.no}  ${up2.name}  ${down2.no}    ${down2.name}
                         ${down3.no}    ${down3.name}

我的代码如下:

    <#list downs as down>
     <tr>
     <td>ups?</td>
     <td>${down.no}</td>
     <td>${down.name}</td>

     </tr>
     </#list>

1 个答案:

答案 0 :(得分:2)

我假设两个列表的大小可以不同。这使事情变得复杂,但是像这样:

<#assign maxSize = (downs?size < ups?size)?then(ups?size, downs?size)>
<#list 0 ..< maxSize as i>
  <td>${(ups[i].no)!}</td>
  <td>${(ups[i].name)!}</td>
  <td>${(downs[i].no)!}</td>
  <td>${(downs[i].name)!}</td>
</#list>

当一个列表中没有更多项目时,需要(...)!来抑制错误,但另一个列表中仍有另外一个项目。

(2.3.28中不需要maxSize计算,您可以在2.3.28中编写0 ..< [ups?size, downs?size]?max。)