项目中Freemarker有一定的使用量,因此这里将Freemarker的基础知识做下总结:
什么是Freemarker了,FreeMarker是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于HTML格式的文用本来自动生成源代码)的通用工具。FreeMarker仅仅使用模板生成文本页面来呈现已经准备好的数据。
在FreeMarker学习过程中,发现其语法结构与Python有很大的相似之处,例如序列。
1. 示例
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${a.url}">${a.name}</a>!
</body>
</html>
对于上述代码,能看懂HTML代码以及Struts2的OGNL或者java的EL表达式时,那么这么几行代码实在小case。
2. 模板
Freemarker的模板组成部分:文本,上面$那样的插值(interpolations),FTL标签外加注释。<#--和-->
2.1 if指令
<#if a.count< 1>
数字为0;
<#else>
数字为1;
</#if>
2.2 list指令
<#list sequence as loopVariable>repeatThis</#list>
2.3 include指令
使用include指令,我们可以插入其他文件的内容到当前的模板中。
<#include "/a.html">
2.4 处理不存在变量
1. 不存在赋初值
<h1>Welcome ${user!"a"}!</h1>
2. 不存在忽略代码段
<#if user??><h1>Welcome ${user}!</h1></#if>
??返回的值是true或false
3. 数值
序列:["foo", "bar", 123.45], 1..100
哈希表:{"name":"green mouse", "price":150}
从哈希表中检索数据:user.name, user[“name”]
序列切分:products[10..19] 和Python相似的是因为可以正反序遍历
该了解的知识:
转义序列 含义
\ 引号(u0022)
\’ 单引号(又称为撇号)(u0027)
\\ 反斜杠(u005C)
\n 换行符(u000A)
\r 回车(u000D)
\t 水平制表符(又称为标签)(u0009) --tab
\b 退格(u0008) --backspace
\f 换页(u000C)
\l 小于号:< --less
\g 大于号:>
\a 和号:& --and
3.1 序列
这个例子可以结合list指令看
<#list ["winter", "spring", "summer", "autumn"] as x>
${x}
</#list>
3.2 哈希表操作
下面的例子键值一样,那么优先是右边的。
<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
- Joe is ${ages.Joe} --这个打印的将是30
- Fred is ${ages.Fred}
- Julia is ${ages.Julia}
3.3 = 和!=
java中判断俩对象是否相等,用的是==,Freemarker用=即可。
使用>或者>=的情况,难道不会出问题,这个解析的时候不会将其当做结束符。所以对于这种情况,可以用gt代替>, gte代替>=,小于这种情况,也有可能出现问题。例如用逻辑与操作的时候,此时可能解析误以为为开始符。所以可以用lt代替 <,lte代替<=。
3.4 逻辑操作
逻辑或:|| 逻辑与:&& 逻辑非:!
3.5 内建函数(有用的东东)
格式为:得到字符串的大写形式:user?upper_case,相当于?意思表示.的意思即可理解。
常见内建函数:
html: 字符串中所有的特殊HTML字符都需要用实体引用来代替(比如<代替<)
cap_first:字符串的第一个字母变为大写形式
lower_case:字符串的小写形式
upper_case:字符串的大写形式
trim:去掉字符串首尾的空格
size:序列中元素的个数
int:数字的整数部分(比如-1.9?int就是-1)
3.6 方法调用
目前有方法repartStr,用于将字符串复制制定次数。
${repeatStr("What", 3)}
4. 自定义
4.1 自定义指令
自定义指令可以使用macro指令来定义,这是模板设计者所关心的内容。Java程序员若不想在模板中实现指令,而在Java 语言中实现指令,可以使用freemarker.template.TemplateDirectiveModel类来扩展。
4.1.1 宏
宏是有一个变量名的模板片段。你可以在模板中使用宏作为自定义指令,这样就能进行重复性的工作。
<#macro greet>
<font size="+2">Hello Joe!</font>
</#macro>
调用方法为<@greet></@greet>
4.2 自定义指令参数
<#macro greet person color>
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
那么如何调用了。
<@greet person="Fred" color="black"/>
记得两个参数都得配置,否则解释不过去。当然可以在宏定义时,设置初始值。例如
<#macro greet person color="black">
根据FTL表达式规则,someParam=foo和someParam="${foo}"是不同的。第一种情况,是把变量foo的值作为参数的值来使用。第二种情况则是使用插值形式的字符串,那么参数值就是字符串了,赋予给someParam也就是字符串了。
4.3 嵌套
个人感觉,嵌套使用之后相当于一个while循环。指令为<#nested>,其执行位于开始和结束标记指令之间的模板代码段
<#macro do_thrice>
<#nested>
<#nested>
<#nested>
</#macro>
<@do_thrice>
a.
</@do_thrice>
运行结果为三个a.呗。
4.4 宏和循环变量
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
那么输出的结果为:
1. 0.5
2. 1
3. 1.5
4. 2 Last!
应该很好理解吧,例如上面1到count=4的值赋给x让其循环,得到的x有几种处理:x ,x/2, x==count
然后调用,调用的变量用;进行隔开。注意变量和循环参数的顺序。
4.5 变量
1. 简单变量。用assign或macro指令来创建或替换这些变量
2. 局部变量。被设置在宏定义体内,使用local指令在宏定义体内来创建或替换局部变量。使用周期为宏的调用过程。
3. 循环变量。由指令(如list)自动创建的,而且它们只在指令的开始和结束标记内有效。
<#assign x = 1> 简单变量
<#list ["loop"] as x> 循环变量
4.6 命名空间
<#macro copyright date>
<p>Copyright (C) ${date} Julia Smith. All rights reserved.
<br>Email: ${mail}</p>
</#macro>
<#import "/lib/my_test.ftl" as my>
<#assign mail="fred@acme.com">
<@my.copyright date="1999-2002"/> //调用函数
${my.mail}
${mail}
看上面的代码知道属于两个不同的命名空间,自己ftl文件直接调用即可,而引入的ftl文件命名空间为my,所以用my可以调用其函数和变量。如果偶尔想要在一个被包含的命名空间上创建或替换一个变量。采用下面的方式
<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="jsmith@other.com" in my>
${my.mail}
输出结果为:
jsmith@acme.com
jsmith@other.com
分享到:
相关推荐
自己整理的freemarker基础知识,适合初学者哦。
freemarker_-_基础知识
FreeMarker语法知识,该文档里面详细的描述了FreeMarker的基本语句和一些示例
适合新手快速了解入门的资料,里面涉及到的都是基础知识
本文的介绍的是freemarker技术以及freemarker技术的一些语法等基础知识。
常用web开发基础,包括html,js,jquery,freemarker等相关知识点
域名要备案了,直接用IP访问吧 #博客简介: 本博客十分轻量,适合正在初学Java Web又没有顺手项目练习的同学,所以需要你有一定的Java基础和前端知识. 基于网上大多数开源站点结构较复杂,功能较繁重,并且页面布局...
1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉列表 41 4.二级联动 42 5.其它表单标签 44 6.其它常用标签的使用(代码参名为“补充”的文件夹下的tag.jsp) 45 七、国际化 47 1.action级别下的国际...
- Spring Boot 基础知识,包括SpringBoot起步、配置详解、aop、filter、拦截器、监听、启动器、全局异常处理、外部Tomcat启动、HTTPS、监控 等。 - springboot-data - Spring Boot 数据库操作,包括SpringJDBC、...
它采用MySQL作为底层数据库,前端使用Freemarker模板引擎和Bootstrap作为UI框架,同时集成了JPA和MyBatis等框架。 对于初学Spring Boot的同学来说,Oasys是一个很不错的项目,可以通过学习和分析该项目的源码来了解...
即便你是编程小白,没有任何编程基础也可以学习本课程。 知识点 1,Java 2,springboot 3,freemarker 4,bootstrap4.3 5,Javaweb 6,微信小程序 同时会借助当下最热门的微信小程序来作为我们的前端展示。所以课程...
Context-support模块:提供了对第三方库嵌入Spring应用的集成支持,比如缓存(EhCache、Guava、JCache)、邮件服务(JavaMail)、任务调度(CommonJ、Quartz)和模板引擎(FreeMarker、JasperReports、速率)。 SpEL模块:...
1) 功能全面:内置稳定高效的MVC基础架构和DAO框架,支持Action拦截、Form Bean / Dao Bean / Spring Bean装配和声明式事务,提供国际化、文件上传下载、缓存和页面静态化等常用Web组件,能满足绝大部分Web应用的...
mysql+jdbc+servlet+freemarker+jquery+bootstrap+...总的来说,毕业设计是高等教育中的一项重要环节,通过此过程,学生不仅能够巩固所学知识,还能培养独立思考和解决问题的能力,为将来的职业发展奠定坚实的基础。
,使用技术:spring 、springmvc、mybatis、maven、...总的来说,毕业设计是高等教育中的一项重要环节,通过此过程,学生不仅能够巩固所学知识,还能培养独立思考和解决问题的能力,为将来的职业发展奠定坚实的基础。
6.7 OGNL表达式语言的基础知识 130 6.7.1 什么是OGNL 130 6.7.2 Struts 2中常用的表达式语言特性 131 6.7.3 表达式语言的高级特性 135 6.8 小结 137 第7章 UI组件标签 139 7.1 为什么需要UI组件标签 139 7.2 标签、...
2.3 XML知识介绍 34 第3章 Struts2核心技术 37 3.1 使用web.xml配置Struts2实现Web项目Struts2应用 37 3.2 使用配置文件struts.xml实现页面导航定义 38 3.3 使用Action类控制导航业务数据 40 3.4 使用ActionSupport...
国内第一个致力JAVA企业级开源软件的公司,国内首家开源软件社会企业――长沙亿美软件有限公司旗下基于JAVA技术研究开发的具有自主核心技术与自主知识产权、适合我国国情的JAVA EE开源内容管理系统软件。 ...
Web又没有顺手项目练习的同学,所以需要你有一定的Java基础和前端知识. 基于网上大多数开源站点结构较复杂,功能较繁重,并且页面布局花里胡哨...... 本博客系统基本上做到了最简:前端仅用了bootstrap,后台用的...
FlyCms 是一个类似知乎以问答为基础的完全开源的JAVA语言开发的社交网络建站程序,基于 Spring Boot+Bootstrap3+MyBatis+MYSQL+Solr+Ehcache 应用架构,专注于社区内容的整理、归类和检索,它集合了问答,digg,wiki...