freemaker入门demo

一 写一个简单的入门demo##

1.创建一个mavenProject-jar######

在pom.xml中引入依赖

 
 		
		org.freemarker
		freemarker
		2.3.23
	  
 
 
2.设置静态模板,放入src/main/resources,后缀名一般使用"ftl"######

	
		
		FreemarkeDemo
	
	
	
		${name},你好,${message}
	

3.设置数据源.src/main/java/com/mydemo/freeMakerDemo######
package com.mydemo.freeMakerDemo;


import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;


import freemarker.template.Configuration;
import freemarker.template.Template;


public class Test {
	public static void main(String[] args) throws Exception {
		/**
		 * 1.创建配置对象
		 * 需要注意的是:
		 * 		new Configuration需要传入参数,参数为freeMaker版本号
		 * 		Configuration有静态方法getVersion()获取版本号
		 */
		Configuration configuration = new Configuration(Configuration.getVersion());
		
		/**
		 * 2.设置模板所在目录
		 * 需要注意的是:
		 * 		setDirectoryForTemplateLoading中的参数是一个File
		 * 		File的参数精确到文件夹
		 * 		与之相反的是后面的输出流对象则是一个文件
		 */
		configuration.setDirectoryForTemplateLoading(new File("E:\\develop\\eclipse1.7\\freemaker-Demo\\src\\main\\resources"));
		
		/**
		 * 3.设置字符集
		 * 非必要,与步骤2位置可以互换
		 * 需要注意的是:
		 *      workspace的字符集也必须更换到utf-8,否则生成的静态页面会有乱码
		 */
		configuration.setDefaultEncoding("utf-8");
		
		/**
		 * 4.获取模板对象,参数String,值随意
		 */
		Template template = configuration.getTemplate("test.ftl"); 
		
		/**
		 * 5.设置数据源
		 * 需要注意的是:
		 * 		数据源可以是pojo,也可以是Map,但Map更加灵活
		 * 		并且,模板中如果有标记,则数据源中必须有对应的数据,否则报错
		 */
		Map map = new HashMap();
		map.put("name", "张三");
		map.put("message", "欢迎使用freemaker");
		
		/**
		 * 6.设置输出位置,以IO流的形式输出,jutidao文件
		 */
		Writer writer = new FileWriter("E:\\developTemps\\test.html");
		
		/**
		 * 输出
		 */
		template.process(map, writer);
		
		/**
		 * 关闭流
		 */
		writer.close();
	}
}

二 指令

语法:<#指令名 参数>

1.注释######

静态模板代码




	
	FreemarkeDemo


	<#--这是freemark的注释-->
	
	${name},你好,${message}





生成的静态页


	
		
		FreemarkeDemo
	
	
		张三,你好,欢迎使用freemaker
	

2.assign指令######

静态模板代码


	
		
		FreemarkeDemo
	
	
		
		
		<#assign linkMan="张三">
${linkMan}
<#assign people={"name":"张三","address":"成都xxxxx","phone":"182xxxxxxxx"}> ${people.name}
${people.address}
${people.phone}

生成的静态页


	
		
		FreemarkeDemo
	
	
		
		
		
张三
张三
成都xxxxx
182xxxxxxxx
3.include指令######

静态模板代码

– test.ftl


	
		
		FreemarkeDemo
	
	
		
		<#include "head.ftl">
		
<#-- 指令 assign--> <#assign linkMan="张三"> ${linkMan}

head.ftl

欢迎使用freemark

生成的静态页面


	
		
		效果图
	
	
		
		欢迎使用freemark
		
张三
4.if指令######

静态模板代码


	
		
		FreemarkeDemo
	
	
		
		<#assign success1=true>
		<#if success1=true>
			通过
		<#else>
			未通过
		
		
<#assign success2=false> <#if success2=true> 通过 <#else> 未通过

生成页面代码


	
		
		FreemarkeDemo
	
	
		
					通过
		
未通过
5.list指令######

数据源(java)代码

package cn.itcast.freemakerDemo;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class Test {
	public static void main(String[] args) throws Exception {
	    // 创建配置对象
		Configuration configuration = new Configuration(Configuration.getVersion());
		
		// 设置模板目录
		configuration.setDirectoryForTemplateLoading(new File("E:\\develop\\eclipse1.7\\freemaker-Demo\\src\\main\\resources"));
		
		// 指定字符集
		configuration.setDefaultEncoding("utf-8");

		// 获取模板对象
		Template template = configuration.getTemplate("test.ftl"); 
		
		// 设置数据源
		// 商品1
		Map goods1=new HashMap();
		goods1.put("name", "苹果");
		goods1.put("price", 5.8);
		// 商品2
		Map goods2=new HashMap();
		goods2.put("name", "香蕉");
		goods2.put("price", 2.5);
		// 商品3
		Map goods3=new HashMap();
		goods3.put("name", "橘子");
		goods3.put("price", 3.2);
		// 封装list
		List> goodsList=new ArrayList>();
		goodsList.add(goods1);
		goodsList.add(goods2);
		goodsList.add(goods3);
		
		// 封装map
		Map>> map = new HashMap>>();
		map.put("goodsList", goodsList);
		
		// 设置输出流
		Writer writer = new FileWriter("E:\\developTemps\\test.html");
		
		// 生成静态代码
		template.process(map, writer);
		
		// 关闭流
		writer.close();
	}
}

静态模板代码


	
		
		FreemarkeDemo
	
	
		<#list goodsList as goods>
			商品名称:${goods.name} || 商品价格:${goods.price}
			

生成页面代码


	
		
		FreemarkeDemo
	
	
			商品名称:苹果 || 商品价格:5.8
			
商品名称:香蕉 || 商品价格:2.5
商品名称:橘子 || 商品价格:3.2

ps:获取列表下表:_index

	<#list goodsList as goods>
		商品名称:${goods.name} || 商品价格:${goods.price}
		

三 内置函数

语法:${对象?内置函数名}

1.获取集合长度 ?size

静态模板代码


	
		
		FreemarkeDemo
	
	
		<#list goodsList as goods>
			商品名称:${goods.name} || 商品价格:${goods.price}
			

本页面一共有${goodsList?size}条数据

生成页面代码


	
		
		FreemarkeDemo
	
	
			商品名称:苹果 || 商品价格:5.8
			
商品名称:香蕉 || 商品价格:2.5
商品名称:橘子 || 商品价格:3.2

本页面一共有3条数据
2.将json字符串转换为json######

静态模板代码


	
		
		FreemarkeDemo
	
			
		<#assign people="{'name':'张三','address':'成都xxxxx','phone':'182xxxxxxxx'}">
		<#assign data=people?eval>
		姓名:${data.name}
地址:${data.address}
电话:${data.phone}

生成页面代码


	
		
		FreemarkeDemo
	
	
		姓名:张三
地址:成都xxxxx
电话:182xxxxxxxx
3.日期格式化

数据源(java)代码

map.put("time",new Date());

静态模板代码


	
		
		FreemarkeDemo
	
	
		当前日期:${time?date}
当前时间:${time?time}
当前日期+时间:${time?datetime}
日期格式化:${time?string("yyyy年MM月dd日 HH时mm分ss秒")}

生成页面代码


	
		
		FreemarkeDemo
	
						
		当前日期:2018-3-3
当前时间:16:42:09
当前日期+时间:2018-3-3 16:42:09
日期格式化:2018年03月03日 16时42分09秒
4.数字格式化(去掉数字的,) ?c######

ps:在freemaker中,数字超过三位会自动加逗号,去掉逗号需要使用${number?c}指令

数据源(java)代码

map.put("num",1312545)

静态模板代码


	
		
		FreemarkeDemo
	
	
		${point?c}
	

生成静态页面


	
		
		FreemarkeDemo
	
	
		12548524
	

四 空值处理

在写模板时,有时候我们不知道某个变量是否会赋值,这时候我们需要对变量进行处理,以防止如果该变量为空造成的程序终止

静态模板代码


	
		
		FreemarkeDemo
	
	
		
		<#if aaa??>
			变量存在
		<#else>
			变量不存在
		
		
${bbb!"变量不存在"}

生成的静态页面


	
		
		FreemarkeDemo
	
	
		
			变量不存在
		
变量不存在

五 其他

1.关于<#if>判断中使用比较运算符报错的问题######

错误代码


	
		
		FreemarkeDemo
	
	
		<#if number>100>
			大于100
		
	

原因:freemaker将"<#if number>100>“分解为了”<#if number>" 和"100>"两部分,判断无法进行

解决办法:将"number>100"用括号包起来 或者使用"gt"(大于),“gte”(大等),“lt”(小于),“lte”(小等)代替


	
		
		FreemarkeDemo
	
	
		
		<#if (number>100)>
			大于100
		
		
<#if numbergt 100> 大于100

你可能感兴趣的:(freemaker入门demo)