本文主要介绍了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编码,本例输出的结果是:&lt;h&gt;people&lt;/h&gt;--> 空值处理运算符:! ??
${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的简单入门程序的更多相关文章

  1. springmvc(一) springmvc框架原理分析和简单入门程序

    springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~ --WH 一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解 ...

  2. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  3. springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  4. MyBatis - 介绍、简单入门程序

    JDBC编程中的问题     1. 将SQL语句硬编码到Java代码,不利于系统维护.         设想如何解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. ...

  5. Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)

    为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...

  6. DirectShow简单入门程序

    1.首先确认已安装过相关工具及配置环境,然后打开vs2010,新建一对话框应用程序 取名为Player_test1,然后打开菜单->项目->属性-> 添加strmmiids.lib库 ...

  7. MyBatis学习(一)简单入门程序

    MyBatis入门学习 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  8. 零基础学习java------38---------spring中关于通知类型的补充,springmvc,springmvc入门程序,访问保护资源,参数的绑定(简单数据类型,POJO,包装类),返回数据类型,三大组件,注解

    一. 通知类型 spring aop通知(advice)分成五类: (1)前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常. (2)正常返回通知 ...

  9. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

随机推荐

  1. Thinkphp 取消Url默认模块的现实

    例子http://www.tp.com/home/index/index 想要现实的效果是:http://www.tp.com/index/index 1是通过配置路由来达到目的 2通过配置首页的入口 ...

  2. 关于 PHP 程序员技术职业生涯规划

    原文地址:http://rango.swoole.com/archives/570 看到很多 PHP 程序员职业规划的文章,都是直接上来就提 Linux.PHP.MySQL.Nginx.Redis.M ...

  3. POJ:2456-Aggressive cows

    Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18313 Accepted: 8716 Desc ...

  4. pyhton,数据类型

    标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) Tuple(元组) List(列表) Sets(集合) Dictionary(字典) 重点是: 类 ...

  5. Windows usb设备正在使用中

    每次插上u盘之后,弹出的时候,总是提示正在使用中.后来我发现了技巧, 1.打开任务管理器 2.打开底部的 打开资源监视器 按钮 3.然后点击磁盘 4.再次弹出usb 就可以弹出了.

  6. 9path 导致的一场冤假错案

    今天做对话框开发,遇到一个问题,就是弹出来的对话框太丑了.如图: 大家都是warp_content, 前面几个就是真的wrap_coment了.只有最后一个还可以看.后来自己找代码,写的都一样,就去问 ...

  7. CF6C Alice, Bob and Chocolate

    CF6C Alice, Bob and Chocolate 题目链接 写了一天搜索写的有点累了,就顺手水了一道CF的模拟题 这道题就是简单的模拟整个题的过程,注意最后输出的形式就好了QWQ AC代码如 ...

  8. C#正则表达式引发的CPU跑高问题以及解决方法

    3月23日(周日)下午16:30左右,博客园主站负载均衡中的2台Web服务器CPU玩起了爬楼梯的游戏(见上图),一直爬到了接近100%.发现这个状况后,我们立即将这2台阿里云临时磁盘云服务器从负载均衡 ...

  9. java中继承的概念

    继承是类的三大特性之一,是java中实现代码重用的重要手段之一.       java中只支持单继承,即每个类只能有一个父类.       继承表达的是is a的关系,或者说一种特殊和一般的关系.   ...

  10. Kotlin中功能操作与集合(KAD 11)

    作者:Antonio Leiva 时间:Feb 2, 2017 原文链接:https://antonioleiva.com/functional-operations-collections-kotl ...