Freemarker模板引擎学习,生成html里的动态表格,可合并单元格
需求:现有html模板,需动态填充数据,并且包含表格,表格大小不固定,根据数据多少确定表格大小。
解析:两种方案:
1.java代码实现:将模板文件读出为StringBuffer,找到特定位置,循环生成表格的行,并替换指定参数(rowspan)的值以合并单元格。
2.freemarker模板引擎,修改模板文件,使其根据参数生成表格,添加freemarker工具类,调用指定方法,填充数据。
我两种方式都实现了,第一种比较简单,要花点时间,现不再讨论。以下为freemarker实现方式:
FreemarkerUtil代码:
package com.zhengwei.controller;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class FreemarkerUtil {public Template getTemplate(String name) {try {// 通过Freemaker的Configuration读取相应的ftlConfiguration cfg = new Configuration();// 设定去哪里读取相应的ftl模板文件cfg.setDirectoryForTemplateLoading(new File("src/main/java/com/zhengwei/ftl"));// 在模板文件目录中找到名称为name的文件Template temp = cfg.getTemplate(name);return temp;} catch (IOException e) {e.printStackTrace();}return null;}/*** 输出HTML文件** @param name* @param root* @param outFile*/public void fprint(String name, Map<String, Object> root, String outFile) {FileWriter out = null;try {// 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径out = new FileWriter(new File("C:/Users/Administrator/Desktop/服务体系/payment/html/" + outFile));Template temp = this.getTemplate(name);// 我这里是输出到文件,如果有其他需求就按照需求做,只要执行temp.process方法就行temp.process(root, out);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}} catch (IOException e) {e.printStackTrace();}}}
}
修改模板文件index.ftl
写个测试类TreemarkerTest:
package com.zhengwei.controller;import com.zhengwei.entity.GoodsPackage;
import com.zhengwei.entity.Group;
import com.zhengwei.entity.OrderInfo;
import com.zhengwei.entity.User;
import org.junit.Test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class FreemarkerTest {@Testpublic void test(){FreemarkerUtil util = new FreemarkerUtil();Map<String, Object> map = new HashMap<String, Object>();//构建数据OrderInfo orderInfo = new OrderInfo();orderInfo.setGoodsName("漫途定位服务");List<GoodsPackage> goodsPackageList = new ArrayList<>();long totalTimes = 0;long totalPrice = 0;for( int i =0 ;i < 5; i++){GoodsPackage goodsPackage = new GoodsPackage();goodsPackage.setGoodsPackageName("测试包00" + i);goodsPackage.setTimes(1000);goodsPackage.setPrice(2);goodsPackage.setGoodsPackageDate(12);goodsPackage.setGoodsPackageNo(3);if( i == 0){//只有一个资费包的情况orderInfo.setSingleGoodsPackage(goodsPackage);}else {goodsPackageList.add(goodsPackage);}totalTimes += goodsPackage.getTimes() * goodsPackage.getGoodsPackageNo();totalPrice += goodsPackage.getPrice() * goodsPackage.getGoodsPackageNo();}orderInfo.setTotalTimes(totalTimes);orderInfo.setTotalPrice(totalPrice);long PackageNo = goodsPackageList.size()+1;map.put("PackageNo",PackageNo);map.put("goodsPackageList",goodsPackageList);map.put("orderInfo",orderInfo);util.fprint("index.ftl", map ,"freemarker.html");}}
执行测试案例,得到如图所示的效果:
解析:<#list goodsPackageList as goodsPackage>标签会将存入list的数据依次取出来,如果有数据,就创建一个tr,并放入数据,直到数据取完。如果没数据,就不执行<#list> 标签里的代码。
Freemarker模板引擎学习,生成html里的动态表格,可合并单元格相关推荐
- Java项目中利用Freemarker模板引擎导出--生成Word文档
应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 资源下载:https://download.csdn.net/download/weixin_41367523 ...
- SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)
本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...
- 如何通过VB合并Excel单元格以及设置Excel行高?VB创建Excel表格,合并单元格,生成图形等操作
如何通过VB合并Excel单元格以及设置Excel行高? 例如:我想把第一列的第4,5,6,7行合并...我在怎样让合并单元格里的字居中,怎样改变字体. 请不吝赐教... ============== ...
- poi根据模板导出word(包含图片、动态生成表格、合并单元格)(亲测有效)
准备工作: 1.需要的jar(jar包在资源处已上传,可下载) 2.创建docx模板(doc不可以) 第一步:准备好jar(这里面的 ooxml-schemas-1.1.jar 大家可以尝试用poi- ...
- jacob 模板生成word文档 表格(合并单元格以及各种表格样式)、图片
一.将 jacob-1.18-M2-x64.dll 文件 放在jdk bin目录下 二.项目中导入jacob.jar 包 三.设置好模板内容 四.测试代码 /*** 主方法测试* @param arg ...
- Java中利用freemarker导出word表格并合并单元格
1.word表格的模板 另存为xml格式: 将保存的xml改成.ftl 格式化一下xml,看看文件中的带有${}是否正确 如果出现这种情况,手动修改下(可复制上一个正确的改下名字) 2.Java代码 ...
- Freemarker模板---引擎学习
一.简要概述 Freemarker是一款模板引擎,是一种基于模版生成静态文件的通用工具,它是使用纯java编写的,一般用来生成HTML页面. 这段时间学习的主要是嵌套freemarker中的取值表达式 ...
- python 生成word表格(合并单元格)
本人使用pycharm,安装库python-docx 代码: from docx import Document from docx.shared import Inches, Pt from doc ...
- jxl生成表格(合并单元格,字体,样式)
public static String testEx() { // a, 计算路径 SimpleDateFormat sdf = new SimpleDateFormat("/yyyy-M ...
最新文章
- HTML中常见的各种位置距离以及dom中的坐标讨论
- Python基础05-数据类型:列表list
- Oracle中的Union、Union All、Intersect、Minus
- DP备份任务失败原因解析
- 白话设计模式——Abstract Factory
- leetcode - K 站中转内最便宜的航班
- 11门满分、10门99分、47门超95分……他却说自己是“学zha”
- linux msgctl清除缓存,linux消息队列
- 为什么说HTTP协议是无状态的
- 游戏建模的常用的软件和建模师的日常是什么?
- LCD12864液晶显示屏引脚,功能介绍【160字】【原创】
- Linux中磁盘扫描流程描述
- js中如何判断一个数是不是素数(三种方法)
- android 2d 字体描边,关于ios下字体描边的一个细节
- 刘意-java基础视频(API-IO流)笔记(一)
- asm.js 和 WebAssembly 有什么区别?
- Ubuntu20.04 虚拟显示器配置(解决无显示器远程黑屏问题)
- secureCRT思科路由器交换机专用脚本
- 软考_2021年5月真题__2020年真题
- Glide4实现网络图片加载进度监听