freemarker模板ftl文件动态展示固定列
时间: 2025-01-03 19:35:56 浏览: 12
### 如何在 FreeMarker 模板中动态展示固定列
为了实现在 FreeMarker (FTL) 文件中动态显示固定列的功能,可以采用如下方法:
#### 使用宏定义列结构
通过创建宏来封装每列的内容逻辑,使得每一列的渲染更加灵活可控。这样不仅能够重复利用代码片段,还能方便地调整各列之间的关系。
```freemarker
<#macro renderColumn data>
<td>${data?html}</td>
</#macro>
<tr>
<@renderColumn "Fixed Column Header"/>
<#list dataList as item>
<@renderColumn item.value/>
</#list>
</tr>
```
此段代码展示了如何定义一个名为 `renderColumn` 的宏用于生成表格单元格 `<td>` ,并将其应用于遍历数据列表中的每一个元素[^1]。
#### 利用条件语句控制可见性
对于那些仅需部分时间展现出来的特殊列,则可以通过设置布尔变量或检查特定属性的存在与否来进行判断,在满足一定条件下才予以呈现。
```freemarker
<#if showSpecialColumn?? && showSpecialColumn>
<th>Special Fixed Column</th>
</#if>
<!-- ... -->
<td class="special-column">
<#if showSpecialColumn?? && showSpecialColumn>
Special content here...
</#if>
</td>
```
上述例子说明了怎样运用条件表达式 (`<#if...`) 来决定是否要输出某一段 HTML 结构,从而达到按需切换列的目的[^2]。
#### 动态构建表头与内容
当面对更复杂的需求时——例如根据传入参数自动适应不同数量和类型的列——则可考虑预先准备一组默认配置项,并允许外部修改这些设定;之后再基于最终确定下来的布局模式去拼接完整的行级标记字符串。
```java
// Java端传递给模板的数据模型示例
Map<String, Object> model = new HashMap<>();
model.put("columns", Arrays.asList(
Map.of("name", "ID", "width", "5%"),
Map.of("name", "Name", "width", "auto"),
// 更多列定义...
));
template.process(model, writer);
```
```freemarker
<table border="1">
<thead>
<tr>
<#list columns as col>
<th style="width:${col.width};">${col.name}</th>
</#list>
</tr>
</thead>
<tbody>
<!-- 行内容生成逻辑 -->
</tbody>
</table>
```
这里给出了一个简单的案例,其中服务端向客户端提供了关于各个字段宽度及名称的信息集合 `columns` 。接着由 FTL 负责解析该数组对象并将之转换成相应的 TH 元素序列[^3]。
阅读全文