在 freemarker 模板中有条件地显示行

Conditionally display line in freemarker template

我正在从 JSON 对象的排序数组创建 PDF,按任务排序,其中每个对象,例如JSON.arr[0] == i,包含备忘录、费率、金额和任务文本。

我想仅在当前任务是第一个任务或与上一个任务不同时才在单独的行中显示任务。 taskText 没有显示任何内容。

<#if JSON?has_content>
<table>
  <tr>
    <th colspan="5">MEMO</th>
    <th>RATE</th>
    <th>AMOUNT</th>
    </tr>
  <#list JSON.arr as i>
    <#if i?first>
      <#assign task = i.taskText>
      <tr><td>${i.taskText}</td></tr>
    </#if>
    <#if i.taskText != task>
      <#assign task = i.taskText>
      <tr><td>${i.taskText}</td></tr>
    </#if>
    <tr>
      <td colspan="5">${i.memo}</td>
      <td>$${i.rate}</td>
      <td>$${i.amount}</td>
    </tr>
  </#list>
</table>
</#if>

使用内置 ?is_first 而不是 ?first。用于检查当前项是否为当前列表中的第一项。

对于另一个要求,我建议在循环之前为task分配一个初始值。很可能任务从未设置为 null 以外的任何内容,因此比较失败。