如何在 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 端的上游准备此计算,以保持模板清洁。
我正在执行一项任务,我需要将 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 端的上游准备此计算,以保持模板清洁。