【问题标题】:How to populate a table in a HTML xml template如何在 HTML xml 模板中填充表格
【发布时间】:2021-11-17 01:59:09
【问题描述】:

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

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

In-office | Working remotely | Not working
__________________________________________

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

所以我的问题是,表格往往是逐行填充的,如果有一种方法可以逐列填充此表格,那么我相信我可以解决。但是,在我定义了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>

是的,我知道这可能不是我应该解决此任务的方式,但我不知道如何实现它。

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

【问题讨论】:

    标签: html xml templates velocity html-templates


    【解决方案1】:

    您需要在显示表格之前进行计算。比如:

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

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2012-03-27
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多