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. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
随机推荐
- Thinkphp 取消Url默认模块的现实
例子http://www.tp.com/home/index/index 想要现实的效果是:http://www.tp.com/index/index 1是通过配置路由来达到目的 2通过配置首页的入口 ...
- 关于 PHP 程序员技术职业生涯规划
原文地址:http://rango.swoole.com/archives/570 看到很多 PHP 程序员职业规划的文章,都是直接上来就提 Linux.PHP.MySQL.Nginx.Redis.M ...
- POJ:2456-Aggressive cows
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18313 Accepted: 8716 Desc ...
- pyhton,数据类型
标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) Tuple(元组) List(列表) Sets(集合) Dictionary(字典) 重点是: 类 ...
- Windows usb设备正在使用中
每次插上u盘之后,弹出的时候,总是提示正在使用中.后来我发现了技巧, 1.打开任务管理器 2.打开底部的 打开资源监视器 按钮 3.然后点击磁盘 4.再次弹出usb 就可以弹出了.
- 9path 导致的一场冤假错案
今天做对话框开发,遇到一个问题,就是弹出来的对话框太丑了.如图: 大家都是warp_content, 前面几个就是真的wrap_coment了.只有最后一个还可以看.后来自己找代码,写的都一样,就去问 ...
- CF6C Alice, Bob and Chocolate
CF6C Alice, Bob and Chocolate 题目链接 写了一天搜索写的有点累了,就顺手水了一道CF的模拟题 这道题就是简单的模拟整个题的过程,注意最后输出的形式就好了QWQ AC代码如 ...
- C#正则表达式引发的CPU跑高问题以及解决方法
3月23日(周日)下午16:30左右,博客园主站负载均衡中的2台Web服务器CPU玩起了爬楼梯的游戏(见上图),一直爬到了接近100%.发现这个状况后,我们立即将这2台阿里云临时磁盘云服务器从负载均衡 ...
- java中继承的概念
继承是类的三大特性之一,是java中实现代码重用的重要手段之一. java中只支持单继承,即每个类只能有一个父类. 继承表达的是is a的关系,或者说一种特殊和一般的关系. ...
- Kotlin中功能操作与集合(KAD 11)
作者:Antonio Leiva 时间:Feb 2, 2017 原文链接:https://antonioleiva.com/functional-operations-collections-kotl ...