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. oracle 日期时间函数

    ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)           Year:              yy two digits 两位年 ...

  2. sql serve 创建序列

    Oracle中有sequence的功能,SQL Server类似的功能使用Identity列实现,但是有很大的局限性. 在2012中,微软终于增加了 sequence 对象,功能和性能都有了很大的提高 ...

  3. 时间操作(JavaScript版)—年月日三级联动(默认显示系统时间)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/35263317         这个功能 ...

  4. CAM 查看里先选哪些层才能方便查看

    CAM 检查 Gerber 时选 Layer 时有先后次序,才以看清楚是否有冲突. 比如检查 TOP 层时顺序应该是 MT ST L1 BOT 层检查顺序 MB SB L2/L4

  5. 【转】解决Win7字体模糊不清晰的最佳办法

    原文网址:http://blog.sina.com.cn/s/blog_3d5f68cd0100ldtp.html 相信初次用win7的朋友,都会遇到字体不清晰的问题,有很多人因为这个问题而放弃使用w ...

  6. Angular 4 http通讯 解决服务器参数无法接收问题

    1.导入 import { Component, OnInit } from '@angular/core'; import {Observable} from 'rxjs/Observable'; ...

  7. SQL Server Reporting Service 报错:报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥,必须还原备份密钥或删除所有加密的内容。

    出现这个问题,可以通过reporting services 配置管理工具来处理 首先,打开配置管理工具,连接. 在左侧的导航选项中选择Encryption Keys,将出现如图所示的界面,在右侧点击d ...

  8. yield对性能提升的一次小小测试

    生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低.生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中 ...

  9. Eclipse: the import java.util cannot be resolved

    the import java.util cannot be resolved 导入JRE System Library. 右键项目 Build Path Configure Build Path.. ...

  10. GC之五--SystemGC完全解读

    目录: GC之一--GC 的算法分析.垃圾收集器.内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor G ...