本文主要介绍了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. 如何快速查看mysql数据文件存放路径?

    进入mysql终端 mysql>show variables like '%datadir%'; 出来的结果即是!

  2. GNU 汇编 协处理器指令

    1. CP15 协处理器 16组寄存器 mcr 写 mrc (rgeister CP15)  读 CP15 到 Register mrc  p15,0,c0,c0,0

  3. Oracle创建表空间,添加用户及授权

    工具/原料 PLSQL 方法/步骤 1.在PLSQL里,用system/css(orcl系统用户)登陆,登陆的时候普通用户登陆选择normal就可以了   2.Oracle用户新增 执行语句 crea ...

  4. SpringMVC文件上传——bean的配置【org.springframework.web.multipart.commons.CommonsMultipartResolver】

    一.简介 Spring MVC支持一个通用的多路上传解析器CommonsMultipartResolver,在Spring的配置文件中对CommonsMultipartResolver Bean进行配 ...

  5. 財務会計関連(FI&CO)

    [財務会計伝票]FB01: 登録FB02: 伝票変更FB09: 明細変更FB03: 照会FB04: 変更履歴照会FB08: 反対仕訳FB05: 消込転記FB50: G/L勘定伝票一般転記FB1S: 勘 ...

  6. MySQL忘记密码怎么重置

    1打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 输入命令  mysqld --skip-grant-tables  回车,此时就跳过了mysql的用户验证.注意输入此命令之后 ...

  7. 原理剖析-Netty之服务端启动工作原理分析(上)

    一.大致介绍 1.Netty这个词,对于熟悉并发的童鞋一点都不陌生,它是一个异步事件驱动型的网络通信框架: 2.使用Netty不需要我们关注过多NIO的API操作,简简单单的使用即可,非常方便,开发门 ...

  8. 「微信小程序免费辅导教程」26,基础内容组件rich-text体验

  9. 图的深度优先遍历&广度优先遍历

    1.什么是图的搜索? 指从一个指定顶点可以到达哪些顶点   2.无向完全图和有向完全图 将具有n(n-1)/2条边的无向图称为无向完全图(完全图就是任意两个顶点都存在边). 将具有n(n-1)条边的有 ...

  10. luogu4196 [CQOI2006]凸多边形 半平面交

    据说pkusc出了好几年半平面交了,我也来水一发 ref #include <algorithm> #include <iostream> #include <cstdi ...