freemarker的简单入门程序

  本文主要介绍了freemarker的常用标签<#list>   <#import>  <#assign>  <#if> <#else> <#elseif>标签,并配有相应的案例。

在这里我想先介绍freemarker一个比较重要的概念:顶层变量:所谓顶层变量就是存在数据模型中的变量.

<#assign>标签的作用就是替换和创建顶层变量。

先看本项目的目录结果如下图所示:

其中FreeMarkerTest2是一个测试程序:

a.ftl和b.ftl是写freemarker标签的地方(.ftl文件就是freemarker template 文件中的意思,翻译成中文是:freemarker 模板文件)

FreeMarkeerTest2的代码如下:

 1 package com.supwisdom;
 2
 3 import freemarker.template.Configuration;
 4 import freemarker.template.Template;
 5
 6 import java.io.File;
 7 import java.io.PrintWriter;
 8 import java.util.ArrayList;
 9 import java.util.Date;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 /**
14  * Created by ${秦林森} on 2017/8/1.
15  */
16 public class FreeMarkerTest2 {
17     public static void main(String[] args) throws Exception{
18         //创建freemarker配置实例
19         Configuration cfg = new Configuration();
20         //这个template是目录中的文件夹名:
21         cfg.setDirectoryForTemplateLoading(new File("template"));
22         //创建数据模型
23         Map root=new HashMap<>();
24         ArrayList<Object> objects = new ArrayList<>();
25         for(int i=1;i<=7;i++){
26             objects.add("星期"+i);
27      }
28         HashMap<String, Address> map = new HashMap<>();
29         map.put("1",new Address("中国","北京"));
30         map.put("2",new Address("美国","华盛顿"));
31         map.put("3",new Address("尼日利亚","内罗毕"));
32         root.put("user","秦林森");
33         root.put("lis",objects);
34         root.put("date",new Date());
35         root.put("map",map);
36         //加载模板文件
37         Template template=cfg.getTemplate("b.ftl");
38         //显示生成数据:
39         PrintWriter out = new PrintWriter(System.out);
40         template.process(root,out);
41         out.flush();
42         out.close();
43     }
44 }

b.ftl的代码如下:其中我认为遍历map集合比较难,已用红色标出。

 1 <#assign user="林肯"><#--替换一个顶层变量-->
 2 ${user!}你是最棒的。you will conquer the world.
 3 <#assign user=4>
 4
 5     <#list lis as n>
 6     ${n}
 7     </#list>
 8 <#list lis as a>
 9 ${a}
10 </#list>
11
12 <#--时间的格式化输出-->
13 ${date?string("yyyy_MM_dd HH:mm:ss")}
14 <#assign user="仁慈"><#--创建一个顶层变量,所谓顶层变量就是直接放在数据模型中的值。-->
15 <#assign number=[1,2,3]><#--这句话相当于java语言中的int[] number=[1,2,3];赋值操作-->
16 ${number[0]}
17 <#assign subs="01234">
18 ${subs[0..1]}
19
20 ${subs[1..4]}
21 <#--遍历map集合首先要得到keys-->
22 <#assign keys=map?keys>
23 <#list keys as c>
24   key:  ${c} 国家:${map["${c}"]["country"]} 城市:${map["${c}"].city}
25 </#list>
26 <#--这两种拼接字符串的效果是一样的-->
27 ${"hellooewio${user}"}
28 ${"hello"+user!}
29
30 if else标签的使用:
31 <#--给a先赋值-->
32 <#assign a=7>
33 <#if a gt 6><#--这里推荐使用gt代替数学中的大于符号">"-->
34     a大于6
35 </#if>
36 if else使用:
37 <#assign b=5>
38 <#if b gt 6>
39     b 大于6
40 <#else>
41     b小于6
42 </#if>
43 if elseif else的使用:
44 <#assign c=4>
45 <#if c gt 4>
46     c大于4
47 <#elseif c lt 4>
48     c小于4
49 <#else>
50 c等于4.
51 </#if>
52
53 freemarker的内建函数:
54 <#assign a="i you me">
55 <#assign b="I YOU ME">
56 <#assign c="<h>people</h>">
57 <#--内建函数cap_first,lower_case,upper_case-->
58 ${a?cap_first}<#--把a的第一个首字母变为大写-->
59 ${b?lower_case}<#--把b的字符串转化为小写-->
60 ${a?upper_case}<#--把a字符串转为大写-->
61 ${c?html}<#--对字符串进行hmtl编码,本例输出的结果是:&lt;h&gt;people&lt;/h&gt;-->
62
63 空值处理运算符:! ??
64 ${oewoei!"人民"}<#--如果数据模型中不存在oewoei这个变量时,赋一个初始值"人民"-->
65 ${"oiieo"!}<#--如果数据模型中不存在oiieo这个变量时,赋一个初始值""-->
66 <#if oweio??><#--oweio在数据模型中存在时输出存在,反之输出不存在-->
67     oweio存在
68 <#else>
69 oweio不存在。
70 </#if>
71 include指令的使用,它相当于把一个文件的内容加到本文件中。
72 <#include "sixi.txt">
73
74 自定义指令宏指令(没有任何参数的):
75 <#macro a>
76     <#if oweioo??>
77         存在
78         <#else>
79             不存在
80     </#if>
81 </#macro>
82 调用自定义指令:(无参的)
83 <@a></@a>
84
85 <#macro m2 a b c >
86 ${a}+${b}+${c}
87 </#macro>
88 <@m2 a="老高" b="老张" c="老马" />
89 把a.ftl文件导入到b.flt中:
90 命名空间命名的:
91 一个重要的规则就是路径不应该包含大写字母,为了分隔词语,使用下划线_,就像
92 wml_form(而不是 wmlForm)。
93
94 <#import "a.ftl" as aaa>
95 <#--调用a.ftl中的变量和方法(宏)-->
96 <@aaa.bo>
97     I am chinese
98 </@aaa.bo>
99 ${aaa.mail}

a.ftl文件的代码如下:

 1 <#--自定义bo这个宏--><#macro bo>
 2     <table>
 3         <tr>
 4             <td>
 5                 <#nested>
 6             </td>
 7             <td>
 8                 <#nested>
 9             </td>
10         </tr>
11     </table>
12 </#macro>
13
14 <@bo>
15     I love china.
16     I love LuAn
17 </@bo>
18 <#assign mail="[email protected]">

Address类的代码如下:

 1 package com.supwisdom;
 2
 3 /**
 4  * Created by ${秦林森} on 2017/7/31.
 5  */
 6 public class Address {
 7     private String country;
 8     private String city;
 9
10     public Address(String country, String city) {
11         this.country = country;
12         this.city = city;
13     }
14
15     public String getCountry() {
16         return country;
17     }
18
19     public void setCountry(String country) {
20         this.country = country;
21     }
22
23     public String getCity() {
24         return city;
25     }
26
27     public void setCity(String city) {
28         this.city = city;
29     }
30 }

具体的参考资料可通过下列网址下载:里面有尚学堂的视频和freemarker中文手册。

http://pan.baidu.com/s/1slJilAl

时间: 2024-10-29 03:44:56

freemarker的简单入门程序的相关文章

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

一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交道,而前面刚写的mybatis跟hibernate一样,与数据库打交道在dao层的另一个框架,而今天所要讲解的springmvc是在web层的另一个框架. springmvc全名是spring web mvc,springmvc是spring的一个模块,并且看名字即可知道,springmvc是一个基

MyBatis 介绍、简单入门程序

JDBC 编程中的问题 1. 将 SQL 语句硬编码到 Java 代码.不利于系统维护. 设想怎样解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. 2. 数据库连接不能反复利用,对数据库资源是一中浪费. 设想怎样解决:使用数据库连接池管理数据库连接. 3. 向 Statement 设置參数时,对于參数的位置通过硬编码指定,不利于系统维护. 设想怎样解决:是否可以自己主动将 Java 对象的值设置到 Statement. 4. 遍历结果集.resultSet

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

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注头条号.每日更新.也可以添加小编微信:fullstackCourse.一起交流,获取最新全栈教程信息.因为FQ原因,不能下载客户端的同仁,可以关注后回复“GitHub客户端”获取安装软件. 上篇教程:GitHub这么火,程序员你不学学吗? 超简单入门教程 干货 GitHub概念部分出现了一丝纰漏.为

GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式的版本控制库.通过使用git,可以方便的记录代码版本. 因国内外大量著名的项目,都开始搬迁到github.它又可以称为开源代码社区. github还是学习的好地方,学习优秀的代码. 可对其他项目中有bug的地方进行改进提交,集合众人的力量促进软件的优化改善. github何其火热,截至2015年2月

Lucene入门程序-Java API的简单使用

Lucene入门程序 准备环境 JDK: 1.8.0_162 IDE: Eclipse Neon.3 数据库: MySQL 5.7.20 Lucene: 4.10.4(已经很稳定了,高版本对部分分词器支持不好) 准备数据 SET FOREIGN_KEY_CHECKS=0; -------------------------------- Table structure for `book` -------------------------------- DROP TABLE IF EXISTS

Freemarker 最简单的例子程序

首先导入包,freemarker.jar 下载地址: freemarker-2.3.18.tar.gz http://cdnetworks-kr-1.dl.sourceforge.net/project/freemarker/freemarker/2.3.18/freemarker-2.3.18.tar.gz 当然如果是Maven项目,可以从仓库里面下载,这里不赘述; 1.通过String来创建模版对象,并执行插值处理 import freemarker.template.Template; i

Asp.Net MVC学习总结(一)——Asp.Net MVC简单入门

出处:http://www.cnblogs.com/SeeYouBug/p/6401737.html 一.MVC简单入门 1.1.MVC概念 视图(View) 代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML.XML和Applet. 模型(Model) 表示用户对其数据的操作的一个封转.可以分为视图模型(view model)和领域模型(domain models),视图模型就是在视图与控制器之间传输数据的一个封转,而领域模型就是业务逻辑,后台数据模型等的一个集

springmvc入门程序

springmvc的入门程序(和前面的mybatis使用同一个案例,商城的案例.订单,购物车等) 需求: 功能需求: 商品的列表查询 环境准备: Java环境: Jdk1.7 Myeclipes9 Springmvc版本:spring3.2 需要spring3.2所有jar,一定要包括spring-webmvc那个 开发步骤: 1.导入jar包,这个不解释了. 2.在web.xml中配置前端控制器: <servlet> <servlet-name>springmvc</ser

windows简单入门(1)

1.1 windows系统的关机 退出所有正在运行的程序,然后点击"关闭计算机"键关机,下面是"关闭计算机"的操作方法:                    图1-2 图1-1 1.2鼠标的操作 ① 鼠标指向一个图标 操作:移动鼠标,将其指针放到屏幕上某一对象上或位置 举例:将鼠标指针从屏幕中的某一处移动到"我的电脑"上,这样就指向了"我的电脑". ② 单击鼠标 操作:将鼠标指向某一对象后,快速按一下鼠标左键,并立即释放,这