Лучший способ использовать несколько последовательностей для столбцов таблицы в FreeMarker - PullRequest
0 голосов
/ 09 января 2020

У меня есть два отдельных списка (набора) данных, которые я хотел бы использовать для создания таблицы

ColumnA      ColumnB
Value1       Value1
Value2       Value2
Value3       Value3
Value4       Value4
             Value5
             Value6

Я знаю, что могу сделать это с помощью POJO, где мои наборы будут POJO (например, a и б) поля и я могу вызывать их в шаблоне, как:

<table>
<tr>
<th>ColumnA</th>
<th>ColumnB</th>
</tr>
<tr>
<#list object as c>
<td>${c.a}</td>
<td>${c.b}</td>
</#list>
</tr>
</table>

Однако я хотел бы использовать отдельные наборы и заполнить ColumnA и ColumnsB отдельно

Не могли бы вы посоветовать лучший способ сделать это?

Например:

data.put ("set1", SET1)

data.put ("set2", SET2)

шаблон :

<table>
<tr>
<th>ColumnA</th>
<th>ColumnB</th>
</tr>
<#list set1 as c>
<tr><td>${c}</td></tr>
</#list>
<#list set2 as d>
<tr><td>${d}</td></tr>
</#list>
</table>

Таким образом, он объединит два набора для столбца A

FIXED

<table>
<tr>
<th>ColumnA</th>
<th>ColumnB</th>
</tr>
<#if set1?size < set2?size>
<#list 0..set2?size-1 as i>
<tr><td>${set2[i]}</td></tr>
<tr>
    <td>
    <#if set1[i]??>
          ${set1[i]}
    <else> ////leave empty string
    </#if>
    </td>
 </tr>
</#list>
</#if>
</table>

Это не окончательный код шаблона, нам нужно чтобы покрыть другие (если-тогда), но это решение, которое я искал

1 Ответ

1 голос
/ 09 января 2020

См. https://freemarker.apache.org/docs/dgui_template_exp.html#dgui_template_exp_var_sequence

Извлечение данных из последовательности

Это то же самое, что и для хэшей, но вы можете использовать только синтаксис в квадратных скобках и выражение в скобках должно вычислять число, а не строку. Например, чтобы получить имя первого животного в примере модели данных (помните, что номер первого элемента равен 0, а не 1): animals[0].name

и встроенная последовательность size: https://freemarker.apache.org/docs/ref_builtins_sequence.html#ref_builtin_size

size

Количество последовательных переменных (в виде числового значения). Максимальный возможный индекс в последовательности s равен s?size - 1 (поскольку индекс первой субвариабельности равен 0), при условии, что последовательность имеет хотя бы одну субвариабельную переменную.

Если вы хотите найти наибольшую size, use https://freemarker.apache.org/docs/ref_builtins_sequence.html#ref_builtin_min_max

min, max

Возвращает меньший (min) или наибольший (max) элемент последовательности ( или коллекция). Элементами должны быть либо все числа, либо все значения даты / времени одного и того же вида (только дата, только время, дата-время), иначе произойдет ошибка сравнения

Это позволяет вам нужно сделать что-то вроде:

<#list 0..<[sequenceA?size, sequenceB?size]?max as i>
  <tr>
  <td>${sequenceA[i]!""}</td>
  <td>${sequenceB[i]!""}</td>
  </tr>
</#list>

См. также:

...