Freemarker模板 configBuilder.getTableInfoList() Table增加自定义字段
时间: 2023-07-20 21:43:22 浏览: 178
你可以通过在模板中使用Freemarker的自定义指令来实现在表格中增加自定义字段。首先,你需要在Java代码中定义一个Freemarker的自定义指令类,具体实现如下:
```java
import java.io.IOException;
import java.util.List;
import java.util.Map;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import freemarker.template.utility.ObjectWrapper;
public class CustomTableDirective implements TemplateDirectiveModel {
@Override
public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
throws TemplateException, IOException {
// 获取表格数据
List<TableInfo> tableInfoList = (List<TableInfo>) env.getVariable("tableInfoList").getAsList();
// 获取自定义字段参数
String customField = params.get("customField").toString();
// 遍历表格数据,为每个表格添加自定义字段
for (TableInfo tableInfo : tableInfoList) {
tableInfo.getFields().add(customField);
}
// 输出表格
body.render(env.getOut());
}
}
```
然后,在你的Freemarker模板中添加以下代码:
```ftl
<#assign customTableDirective = "com.example.CustomTableDirective"?new()>
<#assign tableInfoList = configBuilder.getTableInfoList()>
<@customTableDirective customField="customField">
<#list tableInfoList as table>
<table>
<thead>
<tr>
<#list table.getFields() as field>
<th>${field}</th>
</#list>
</tr>
</thead>
<tbody>
<#list table.getRows() as row>
<tr>
<#list table.getFields() as field>
<td>${row[field]}</td>
</#list>
</tr>
</#list>
</tbody>
</table>
</#list>
</@customTableDirective>
```
这样,你就可以在表格中添加自定义字段了。注意,这里假设你的表格数据是通过变量`tableInfoList`传递给模板的。如果你的表格数据来源不同,需要修改相应的代码。
阅读全文