如何在 HTML xml 模板中填充 table

How to populate a table in a HTML xml template

我正在执行一项任务,我需要将 table 的数据添加到我们的电子邮件模板中。我正在使用 Scala 后端,并使用 Velocity 将上下文添加到我们的电子邮件中。此 table 有 3 列用于 3 种不同的工作类型:在办公室、远程工作和不工作。

每列应包含在给定日期工作类型与该列匹配的员工的姓名。我遇到的问题是,我不知道如何以我们想要的格式填写此 table。 table 的一个例子是:

In-office | Working remotely | Not working
__________________________________________

Bob S     | Helen R          | Nobody
John D    | Samuel C         |
Harry F  

所以我的问题是,tables 倾向于逐行填充,如果有办法我可以逐列填充这个 table 那么我确定我可以弄清楚。但是,在定义了 HTML 模板的 xml 文档中,我目前有以下内容:

<table id="demo">
   <tr><th> In-office</th><th>Working remotely</th><th>Not working</th></tr>
      #foreach( $teamDay in $scheduleDaysForTeam )
      #if($teamDay.date == $day.date)
      <tr><td></td><td></td><td></td></tr>
</table>

是的,我知道这也许不是我处理这项任务的方式,但我不知道如何才能实现它。

对于上下文,scheduleDaysForTeam 属于 Array[util.Hashtable[String, String]] 类型,$day 来自单独的 Array[util.Hashtable[String, String]]

您需要在显示 table 之前进行计算。类似于:

## some working variables
#set( $modes = [ 'off', 'rem', 'nw' ] )
#set( $columns = { 'off': [], 'rem': [], 'nw': [] } )

## fill $columns
#foreach( $teamDay in $scheduleDaysForTeam )
  #if( $teamDay.date == $day.date )
    #set( $junk = $colums[$teamDay.mode].addAll($teamDay.members) )
  #end
#end

## get the maximum length
#set( $max = 0 )
#foreach( $mode in $modes )
  #if( $columns[$mode].size() > $max )
    #set( $max = $columns.get($mode).size() )
  #end
#end

## display the result
<table id="demo">
   <tr><th> In-office</th><th>Working remotely</th><th>Not working</th></tr>
#foreach( $line in [0..$max] )
  <tr>
  #foreach( $mode in $modes )
    <td>
    #if( $columns[$mode].size() > $foreach.index ​)
      $columns[$mode][$foreach.index]
    #elseif( $foreach.index == 0)
      Nobody
    #end
    </td>
  #end
  </tr>
#end


#foreach( $teamDay in $scheduleDaysForTeam )
      #if($teamDay.date == $day.date)
      <tr><td></td><td></td><td></td></tr>
</table>

当然,如果您可以访问它,最好在 Java 端的上游准备此计算,以保持模板清洁。