本文主要介绍了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. python 获取项目的根路径

    root_path = os.path.abspath(os.path.dirname(__file__)).split('shippingSchedule')[0] shippingSchedule ...

  2. linux shell 部分问题解决方法

    1.  判断shell里判断字符串是否包含某个字符 a.  可以用正则式匹配符号      “=~” 举例:str="this is a string" 要想在判断str中是否含有 ...

  3. ubuntu18.04.1LTS系统远程工具secureCRT

    ubuntu18.04.1LTS类windows的系统下安装远程管理工具 本地电脑之前安装的是win10,疲于win10频繁的更新和各种兼容问题,果断放弃win10系统,安装了Ubuntu 18.04 ...

  4. 【linux】【指令】systemctl 指令部分解读

    systemctl [OPTIONS...] {COMMAND} ... Query or send control commands to the systemd manager. -h --hel ...

  5. python之微信好友统计信息

    需要安装库:wxpy 代码如下: from wxpy import Bot,Tuling,embed,ensure_one bot = Bot(cache_path=True) #获取好友信息 bot ...

  6. 使用shell脚本依据分区信息分批次的下载hive表格数据

    今天的业务场景大概是这样的,我想把hive表格下载到本地文件系统,然后把这个文件传送到另一个服务器上. 但是这个业务场景一个核心问题就是说我本地机器内存有限,hive表格大概是70G,我是不可能全部下 ...

  7. K-均值聚类——电影类型

    K-均值聚类 K-均值算法试图将一系列样本分割成K个不同的类簇(其中K是模型的输入参数),其形式化的目标函数称为类簇内的方差和(within cluster sum of squared errors ...

  8. 12 Django组件-forms组件

    forms组件 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_l ...

  9. ListView Viewholder的坑 线性布局的坑

    1.ListView Viewholder的坑 /** * 默认带图片的menu adapter */ public static class MenuImageAdapter extends Bas ...

  10. 关于 package.json 和 package-lock.json 文件说明

    package.json 在 Node.js 中,模块是一个库或框架,也是一个 Node.js 项目.Node.js 项目遵循模块化的架构,当我们创建了一个 Node.js 项目,意味着创建了一个模块 ...