`
liuwei8728
  • 浏览: 32441 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Freemarker基础知识(1)

阅读更多

项目中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字符都需要用实体引用来代替(比如<代替&lt;)

 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语法知识,该文档里面详细的描述了FreeMarker的基本语句和一些示例

    freemarker快速入门

    适合新手快速了解入门的资料,里面涉及到的都是基础知识

    Freemaker技术调研文档

    本文的介绍的是freemarker技术以及freemarker技术的一些语法等基础知识。

    前台开发基础

    常用web开发基础,包括html,js,jquery,freemarker等相关知识点

    blog:运用Jfinal + BootStrap + FreeMarker构建的博客系统

    域名要备案了,直接用IP访问吧 #博客简介: 本博客十分轻量,适合正在初学Java Web又没有顺手项目练习的同学,所以需要你有一定的Java基础和前端知识. 基于网上大多数开源站点结构较复杂,功能较繁重,并且页面布局...

    Struts2入门教程(全新完整版)

    1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉列表 41 4.二级联动 42 5.其它表单标签 44 6.其它常用标签的使用(代码参名为“补充”的文件夹下的tag.jsp) 45 七、国际化 47 1.action级别下的国际...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot 基础知识,包括SpringBoot起步、配置详解、aop、filter、拦截器、监听、启动器、全局异常处理、外部Tomcat启动、HTTPS、监控 等。 - springboot-data - Spring Boot 数据库操作,包括SpringJDBC、...

    办公自动化(OA)是面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,极大提高公司的办公效率

    它采用MySQL作为底层数据库,前端使用Freemarker模板引擎和Bootstrap作为UI框架,同时集成了JPA和MyBatis等框架。 对于初学Spring Boot的同学来说,Oasys是一个很不错的项目,可以通过学习和分析该项目的源码来了解...

    java后台开发入门(springboot快速入门)

    即便你是编程小白,没有任何编程基础也可以学习本课程。 知识点 1,Java 2,springboot 3,freemarker 4,bootstrap4.3 5,Javaweb 6,微信小程序 同时会借助当下最热门的微信小程序来作为我们的前端展示。所以课程...

    基于java的企业级应用开发:Spring AOP简介.ppt

    Context-support模块:提供了对第三方库嵌入Spring应用的集成支持,比如缓存(EhCache、Guava、JCache)、邮件服务(JavaMail)、任务调度(CommonJ、Quartz)和模板引擎(FreeMarker、JasperReports、速率)。 SpEL模块:...

    JessMA Java Web 应用开发框架 (v3.2.2-20130815).pdf

    1) 功能全面:内置稳定高效的MVC基础架构和DAO框架,支持Action拦截、Form Bean / Dao Bean / Spring Bean装配和声明式事务,提供国际化、文件上传下载、缓存和页面静态化等常用Web组件,能满足绝大部分Web应用的...

    奇葩地铁售票系统.zip

    mysql+jdbc+servlet+freemarker+jquery+bootstrap+...总的来说,毕业设计是高等教育中的一项重要环节,通过此过程,学生不仅能够巩固所学知识,还能培养独立思考和解决问题的能力,为将来的职业发展奠定坚实的基础。

    spring 、springmvc、mybatis分布式多店铺电商系统.zip

    ,使用技术:spring 、springmvc、mybatis、maven、...总的来说,毕业设计是高等教育中的一项重要环节,通过此过程,学生不仅能够巩固所学知识,还能培养独立思考和解决问题的能力,为将来的职业发展奠定坚实的基础。

    Struts2 in action中文版

    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 标签、...

    struts2讲义_吴峻申

    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...

    亿美内容管理系统 ExmayCMS v1.1.5 Beta.zip

    国内第一个致力JAVA企业级开源软件的公司,国内首家开源软件社会企业――长沙亿美软件有限公司旗下基于JAVA技术研究开发的具有自主核心技术与自主知识产权、适合我国国情的JAVA EE开源内容管理系统软件。   ...

    飞鸽传书java源码-blog:博客

    Web又没有顺手项目练习的同学,所以需要你有一定的Java基础和前端知识. 基于网上大多数开源站点结构较复杂,功能较繁重,并且页面布局花里胡哨...... 本博客系统基本上做到了最简:前端仅用了bootstrap,后台用的...

    开源中国源码

    FlyCms 是一个类似知乎以问答为基础的完全开源的JAVA语言开发的社交网络建站程序,基于 Spring Boot+Bootstrap3+MyBatis+MYSQL+Solr+Ehcache 应用架构,专注于社区内容的整理、归类和检索,它集合了问答,digg,wiki...

Global site tag (gtag.js) - Google Analytics