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. flynn 开源paas 平台安装试用

    flynn 是一个不错的开源paas 平台,基于git 以及容器技术,开发模型与 heroku 基本一样,同时构建方式就是基于heroku 的buildpacks 安装 官方文档提示说明是ubuntu ...

  2. asp.net 导出excel的一种方法

    项目用到的一种导出excel 的方法予以记录:(具体的业务类可更具情况替换使用) protected void Export(string filename, List<ComponentCon ...

  3. nodejs 使用express开发获取其他网站引用本站点js文件的参数

    nodejs进行站点的开发其性能是很好的,在js 大行其道的天下,使用js基本上可以干好多只要我们能想到的东西,我们可以使用js文件进行用户验证等等. 这次我们就使用express 进行获取其他站点引 ...

  4. Vue 的自定义事件系统:实现子组件跟父组件通信

    父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件 v-on 写在引用的子组件上, 语句 this.$emit('xxx') ,写在子组件里.

  5. Linux 命令英文全称

    Linux 命令英文全称 linux 命令 英文全称 sudo superuser do su swith user df Disk free,空余硬盘 du Disk usage,硬盘使用率 noh ...

  6. 关于 Cookie-free Domains (为什么将静态图片,js,css存放到单独的域名?)

    这篇文章对高性能web开发具有参考性:http://developer.yahoo.com/performance/rules.html 本文主要描述使用裸域名做网站主域名时,如何用子域名做 cook ...

  7. 转:使用JMeter创建数据库(Mysql)测试

    我的环境:MySQL:mysql-essential-5.1.51-win32 jdbc驱动:我已经上传到csdn上一个:http://download.csdn.net/source/3451945 ...

  8. SSD学习,keras

    https://github.com/pierluigiferrari/ssd_keras

  9. C# 解析 json Newtonsoft果然强大,代码写的真好

    C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...

  10. BASIC-8_蓝桥杯_回文数

    示例代码: #include <stdio.h> int main(void){ int i = 0 ; int a = 0 , b = 0 , c = 0 , d = 0 ; for ( ...