Freemarker 是一款模板引擎,是一种基于模版生成静态文件的通用 工具,它是为java程序员提供的一个开发包。

可通过将Word或者Excel模板另存为xml格式,在其中修改要替换的内容。

基本语法

基本内容输出: 

${***}

List循环输出:

<#list namelist as item>
  ${item.name}
</#list>

item_index:当前变量的索引值
item_has_next:是否存在下一个对象
使用<#break>指令跳出迭代

List的总数获取:

${namelist?size}

Map循环输出:

<#list empMap?keys as key>
${empMap[key]}
</#list>

设定变量:

<#assign age=23>

判断:

表达式中支持的比较运算符有如下几个:

=或者==:判断两个值是否相等.

!=:判断两个值是否不等.

>或者gt:判断左边值是否大于右边值

>=或者gte:判断左边值是否大于等于右边值

<或者lt:判断左边值是否小于右边值

<=或者lte:判断左边值是否小于等于右边值

<#if (name == 'zhangsan') >
zhangsan
<#elseif (name == 'lisi')>
  lisi
<#else>
  wangwu
</#if>

默认值:

${empMap['name']?default("wangwu")} 
${empInfo.empName?default('')}

null值判断和处理:

${empMap[key]!("null")}
?default('') <#if empMap[key]??></#if>
${empMap['name']?if_exists

日期处理:

?string("yyyy/M/d")

<#if items.birthday??>${items.birthday?string("yyyy/M/d")}</#if>

数字格式化:

${strnum?string(",##0.0#")}

${strnum?string("#0.0#")}

excel使用

在excel中设置好模板,模板内容最好先用要替代的字段名称代替,方便替换。将excel另存为xml格式文件。

打开xml文件找到<Row>将替换内容用${***}代替,同时循环行添加<# list>。

因有时excel设置有最大行数限制,因此需要修改Worksheet的属性ss:ExpandedRowCount,ss:ExpandedColumnCount设置为一个合理的范围。

否则最后生成excel后会有打不开报错的情况。

/**
* @Description: 导出文件,使用FreeMarker
* @author DennyZhao
* @date 2017年12月20日
* @version 1.0
*/
public abstract class ExportController { public static Configuration config = null;
static {
String templatePath = File2Utils.getResourcePath() + "/ftl";
try {
config = new Configuration(Configuration.VERSION_2_3_27);
config.setDefaultEncoding("UTF-8");
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
config.setDateFormat(Date2Utils.DATE_FORMAT_DEFAULT);
config.setDirectoryForTemplateLoading(new File(templatePath));
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 获取数据
* @return
*/
protected abstract Map<String, Object> getData(SearchCondition condition); public void createTemplateStream(HttpServletResponse resp, String fileName, SearchCondition condition) {
Template template = null;
try {
template = config.getTemplate(fileName);
Writer osw = new OutputStreamWriter(resp.getOutputStream(), CommonConstants.ENCODE_CHARSET_DEFAULT);
template.process(getData(condition), osw);
osw.flush();
osw.close();
} catch (TemplateNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedTemplateNameException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 文件模板下载
* @param outputStream
* @throws IOException
*/
public void createFileModelStream(HttpServletResponse resp,String fileName) throws IOException {
OutputStream os = resp.getOutputStream();
String modelFilePath = File2Utils.getResourcePath() + "/fileModel";
File file = new File(modelFilePath, fileName);
InputStream is = new FileInputStream(file);
resp.setContentLengthLong(is.available());
byte[] b = new byte[1024];
int count = 0;
while((count = is.read(b, 0, 1024)) > 0) {
os.write(b, 0, count);
}
is.close();
os.flush();
os.close();
} }

参考文章:

Freemarker实例教程(http://blog.csdn.net/chenghui0317/article/details/7832474)

另类:JAVA用freemarker生成复杂Excel(http://blog.csdn.net/zhanwentao2/article/details/7298341)

模板引擎-freemarker的更多相关文章

  1. 实现一个代码自动生成(一):模板引擎Freemarker

    目录 前言 模板引擎FreeMarker 前言 在现在的开发当中,代码生成已经是必不可少的一个功能,每个公司都会有自己的一套定制的项目骨架,而实现代码自动生成,模板引擎是必不可少的,所以在这篇博客中, ...

  2. Java模板引擎Freemarker

    Java模板引擎Freemarker 1.取值(插值)指令 2.逻辑指令:if.switch 3.字符串.集合操作 4.自定义函数 5.list排序内建函数.常用指令 6.自定义指令 7.freema ...

  3. Java模板引擎 FreeMarker

    @(编程) [TOC] 1. 简介 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.它是为Java程序员提供的一个开发包.它不是面向最终用户的,而是为程序员 ...

  4. Spring Boot (三)模板引擎FreeMarker集成

    一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组 ...

  5. springboot配置server相关配置&整合模板引擎Freemarker、thymeleaf&thymeleaf基本用法&thymeleaf 获取项目路径 contextPath 与取session中信息

    1.Springboot配置server相关配置(包括默认tomcat的相关配置) 下面的配置也都是模板,需要的时候在application.properties配置即可 ############## ...

  6. springboot集成模板引擎freemarker和thymeleaf

    freemarkder和thymeleaf都是java的模板引擎,这里只介绍这两种模板引擎如何在sprongboot中配置: 1. freemarkder 1.1 在pom.xml中添加依赖包 < ...

  7. SpringBoot系列:Spring Boot使用模板引擎FreeMarker

    一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...

  8. SpringBoot第九集:整合JSP和模板引擎Freemarker/Thymeleaf(2020最新最易懂)

    SpringBoot第九集:整合JSP和模板引擎(2020最新最易懂) 当客户通过前端页面提交请求后,我们以前是怎么做的?后端接收请求数据,处理请求,把响应结果交给模板引擎JSP,最后将渲染后的JSP ...

  9. Spring Boot整合模板引擎freemarker

    jsp本质是servlet,渲染都在服务器,freemarker模板引擎也是在服务器端渲染. 项目结构 引入依赖pom.xml <!-- 引入 freemarker 模板依赖 --> &l ...

随机推荐

  1. stenciljs 学习四 组件装饰器

    stenciljs 可以方便的构建交互式组件 支持以下装饰器 component prop watch state method element component 说明 component 包含ta ...

  2. 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。

    请求因 HTTP 状态 401 失败: Unauthorized 今天在调用webserver时出现了上述标题的错误,开始认为是由于端口的问题,我把端口恢复80默认端口后,但是问题并没有解决!后来我自 ...

  3. cacheAsBitmap位图缓存

    使用cacheAsBitmap将缓存显示对象的内部位图表示形式. 此缓存可以提高包含复杂矢量内容的显示对象的性能.此方法适合运用于较多的图片或文字移动,不过也不能太随意乱用,有利必有弊,使用cache ...

  4. FastAdmin 系统配置中添加选项卡

    群里有小伙伴问怎么在系统配置中添加选卡,之前试过. 流程如下 刷新页面,然后就有了.

  5. FastAdmin 怎么把模块设置默认的首页?

    F4NNIU: 参考 ThinkPHP5 的路由设置. fangke-河南: 或者看config.php Karson:需要把插件设置为默认首页吗?在后台就可以,设置他插件的为伪静态,即可.

  6. Hanlp中文自然语言处理入门介绍

    自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部分.这个星球上有许多生物拥有超过人类的视 ...

  7. 【Active入门-3】ActiveMQ学习-发布者与订阅者

    2015年4月28日 1个发布者,1个订阅者,topic 方式1: 先发布消息: 然后订阅消息: 方式2: 先订阅消息: 然后发布消息:订阅者如下: 结论1: 从上面可以看出,消息发布需要在线发布. ...

  8. zabbix 3.4新功能值预处理

    Zabbix 3.4版本更新了许多新功能,其中一个监控项功能Preprocessing,根据官方说明文档,在监控项收集的数据存储到数据库前,预先对数据进行处理,使用效果超过预期.这个功能存放位置在创建 ...

  9. jstack可以定位到线程堆栈

    java命令--jstack 工具 JVM调优之jstack找出最耗cpu的线程并定位代码 jstack可以定位到线程堆栈,根据堆栈信息我们

  10. 同一个IP段ping不通同事的电脑

    原因居然是同事的防火墙打开了. windows关闭防火墙的教程,请自行百度.