freemarker的简单入门程序
本文主要介绍了freemarker的常用标签<#list> <#import> <#assign> <#if> <#else> <#elseif>标签,并配有相应的案例。
在这里我想先介绍freemarker一个比较重要的概念:顶层变量:所谓顶层变量就是存在数据模型中的变量.
<#assign>标签的作用就是替换和创建顶层变量。
先看本项目的目录结果如下图所示:

其中FreeMarkerTest2是一个测试程序:
a.ftl和b.ftl是写freemarker标签的地方(.ftl文件就是freemarker template 文件中的意思,翻译成中文是:freemarker 模板文件)
FreeMarkeerTest2的代码如下:
package com.supwisdom; import freemarker.template.Configuration;
import freemarker.template.Template; import java.io.File;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; /**
* Created by ${秦林森} on 2017/8/1.
*/
public class FreeMarkerTest2 {
public static void main(String[] args) throws Exception{
//创建freemarker配置实例
Configuration cfg = new Configuration();
//这个template是目录中的文件夹名:
cfg.setDirectoryForTemplateLoading(new File("template"));
//创建数据模型
Map root=new HashMap<>();
ArrayList<Object> objects = new ArrayList<>();
for(int i=1;i<=7;i++){
objects.add("星期"+i);
}
HashMap<String, Address> map = new HashMap<>();
map.put("1",new Address("中国","北京"));
map.put("2",new Address("美国","华盛顿"));
map.put("3",new Address("尼日利亚","内罗毕"));
root.put("user","秦林森");
root.put("lis",objects);
root.put("date",new Date());
root.put("map",map);
//加载模板文件
Template template=cfg.getTemplate("b.ftl");
//显示生成数据:
PrintWriter out = new PrintWriter(System.out);
template.process(root,out);
out.flush();
out.close();
}
}
b.ftl的代码如下:其中我认为遍历map集合比较难,已用红色标出。
<#assign user="林肯"><#--替换一个顶层变量-->
${user!}你是最棒的。you will conquer the world.
<#assign user=4> <#list lis as n>
${n}
</#list>
<#list lis as a>
${a}
</#list> <#--时间的格式化输出-->
${date?string("yyyy_MM_dd HH:mm:ss")}
<#assign user="仁慈"><#--创建一个顶层变量,所谓顶层变量就是直接放在数据模型中的值。-->
<#assign number=[1,2,3]><#--这句话相当于java语言中的int[] number=[1,2,3];赋值操作-->
${number[0]}
<#assign subs="01234">
${subs[0..1]} ${subs[1..4]}
<#--遍历map集合首先要得到keys-->
22 <#assign keys=map?keys>
23 <#list keys as c>
24 key: ${c} 国家:${map["${c}"]["country"]} 城市:${map["${c}"].city}
25 </#list>
<#--这两种拼接字符串的效果是一样的-->
${"hellooewio${user}"}
${"hello"+user!} if else标签的使用:
<#--给a先赋值-->
<#assign a=7>
<#if a gt 6><#--这里推荐使用gt代替数学中的大于符号">"-->
a大于6
</#if>
if else使用:
<#assign b=5>
<#if b gt 6>
b 大于6
<#else>
b小于6
</#if>
if elseif else的使用:
<#assign c=4>
<#if c gt 4>
c大于4
<#elseif c lt 4>
c小于4
<#else>
c等于4.
</#if> freemarker的内建函数:
<#assign a="i you me">
<#assign b="I YOU ME">
<#assign c="<h>people</h>">
<#--内建函数cap_first,lower_case,upper_case-->
${a?cap_first}<#--把a的第一个首字母变为大写-->
${b?lower_case}<#--把b的字符串转化为小写-->
${a?upper_case}<#--把a字符串转为大写-->
${c?html}<#--对字符串进行hmtl编码,本例输出的结果是:<h>people</h>--> 空值处理运算符:! ??
${oewoei!"人民"}<#--如果数据模型中不存在oewoei这个变量时,赋一个初始值"人民"-->
${"oiieo"!}<#--如果数据模型中不存在oiieo这个变量时,赋一个初始值""-->
<#if oweio??><#--oweio在数据模型中存在时输出存在,反之输出不存在-->
oweio存在
<#else>
oweio不存在。
</#if>
include指令的使用,它相当于把一个文件的内容加到本文件中。
<#include "sixi.txt"> 自定义指令宏指令(没有任何参数的):
<#macro a>
<#if oweioo??>
存在
<#else>
不存在
</#if>
</#macro>
调用自定义指令:(无参的)
<@a></@a> <#macro m2 a b c >
${a}+${b}+${c}
</#macro>
<@m2 a="老高" b="老张" c="老马" />
把a.ftl文件导入到b.flt中:
命名空间命名的:
一个重要的规则就是路径不应该包含大写字母,为了分隔词语,使用下划线_,就像
wml_form(而不是 wmlForm)。 <#import "a.ftl" as aaa>
<#--调用a.ftl中的变量和方法(宏)-->
<@aaa.bo>
I am chinese
</@aaa.bo>
${aaa.mail}
a.ftl文件的代码如下:
<#--自定义bo这个宏-->
<#macro bo>
<table>
<tr>
<td>
<#nested>
</td>
<td>
<#nested>
</td>
</tr>
</table>
</#macro> <@bo>
I love china.
I love LuAn
</@bo>
<#assign mail="123@qq.com">
Address类的代码如下:
package com.supwisdom; /**
* Created by ${秦林森} on 2017/7/31.
*/
public class Address {
private String country;
private String city; public Address(String country, String city) {
this.country = country;
this.city = city;
} public String getCountry() {
return country;
} public void setCountry(String country) {
this.country = country;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
}
}
具体的参考资料可通过下列网址下载:里面有尚学堂的视频和freemarker中文手册。
http://pan.baidu.com/s/1slJilAl
freemarker的简单入门程序的更多相关文章
- springmvc(一) springmvc框架原理分析和简单入门程序
springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~ --WH 一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解 ...
- SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序
一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...
- springmvc框架原理分析和简单入门程序
一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...
- MyBatis - 介绍、简单入门程序
JDBC编程中的问题 1. 将SQL语句硬编码到Java代码,不利于系统维护. 设想如何解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. ...
- Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)
为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...
- DirectShow简单入门程序
1.首先确认已安装过相关工具及配置环境,然后打开vs2010,新建一对话框应用程序 取名为Player_test1,然后打开菜单->项目->属性-> 添加strmmiids.lib库 ...
- MyBatis学习(一)简单入门程序
MyBatis入门学习 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...
- 零基础学习java------38---------spring中关于通知类型的补充,springmvc,springmvc入门程序,访问保护资源,参数的绑定(简单数据类型,POJO,包装类),返回数据类型,三大组件,注解
一. 通知类型 spring aop通知(advice)分成五类: (1)前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常. (2)正常返回通知 ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
随机推荐
- python核心编程2 第八章 练习
8–2. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入的是 ...
- 用js控制单选框或者多选框问题
出现如图问题时,这时不能用attr方法添加checked属性了,改用$( "input" ).prop( "checked", true ),完美解决.
- JZOJ 3521. 道路覆盖
Description ar把一段凹凸不平的路分成了高度不同的N段,并用H[i]表示第i段高度.现在Tar一共有n种泥土可用,它们都能覆盖给定的连续的k个部分. 对于第i种泥土,它的价格为C[i],可 ...
- pytorch中词向量生成的原理
pytorch中的词向量的使用 在pytorch我们使用nn.embedding进行词嵌入的工作. 具体用法就是: import torch word_to_ix={'hello':0,'world' ...
- stark组件(7):增加分页功能
效果图: 分页部分代码: # 1.分页处理 all_count = self.model_class.objects.all().count() query_params = request.GET. ...
- PAT Basic 1057
1057 数零壹 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有 ...
- 2015 acm taipei L-Reward the Troop(uvalive 7465)(找规律)
原题链接 就大概说的是一个将军要给部下发勋章,他的部下以和别人不一样的勋章为荣,但是他没这么多钱,所以问你最少要多少钱 要求是每个人的上司是他的上两级,他的下两级是他的部下,每个人的勋章不能和他的上司 ...
- TensorFlow验证码识别
本节我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里我们识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 验 ...
- gcc常用命令
1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件连接 5.1编译成 ...
- HDU 1384 Intervals(差分约束)
Intervals Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...