0

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

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

In-office | Working remotely | Not working
__________________________________________

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

所以我的问题是,表格往往是逐行填充的,如果有一种方法可以逐列填充此表,那么我相信我可以弄清楚。但是,在定义模板的xml文档中HTML,我目前有以下内容:

<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]].

4

1 回答 1

0

您需要在显示表格之前进行计算。就像是:

## 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 端上游准备这个计算,以保持模板干净。

于 2021-09-24T11:29:13.997 回答