美文网首页
2019-02-13 Freemaker学习笔记

2019-02-13 Freemaker学习笔记

作者: 攻城狮哦哦也 | 来源:发表于2019-02-14 15:10 被阅读0次

1、什么是Freemaker?Freemaker的优缺点以及和jsp的比较

1.1 什么是Freemaker

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。

简单来说就是“模板 + 数据模型 = 输出”

image

1.2 Freemaker的优缺点以及和jsp的比较

(一) FreeMarker的优点

① FreeMarker的优点一,可以彻底的分离表现层和业务逻辑。

曾经在使用JSP 开发过程中发现在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。

FreeMarker根本不支持Java脚本代码。

FreeMarker的原理就是:模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。

② FreeMarker的优点二,可以提高开发效率。

根据以往的开发经验,使用的都是JSP 页面来展示数据的,即所谓的表现层。大家都知道,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。相对于JSP来说,FreeMarker模板技术不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,大家在不必在等待界面设计开发人员完成页面原形后,大家再来开发程序。

③ FreeMarker的优点三,使得开发过程中的人员分工更加明确。

以往用JSP展现数据时,作为程序员的我们,并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。对两者而言,交替性的工作本身就有难度。有时候稍有不慎,可能会将某个页面元素删除或去掉了某个程序符号,使得页面走样或程序错误,这样就需要双方相互沟通协作,解决出现的问题。有时候因为项目中的时间,任务量等因素的存在,可能这个工作就由一个人来完成,这样就可能加大某一方开发人员的工作量。

使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。

(二)FreeMarker的缺点

① FreeMarker的缺点一,应用FreeMarker模板技术,在修改模板后,可能会看到已经过期的数据。如:生成静态的HTML页面后,如果一旦模板改变,而没有及时更新模板生成的HTML页面的话,用户看到的就是过期的数据。

② FreeMarker的缺点二,FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。

③ FreeMarker的缺点三,FreeMarker的map限定key必须是string,其他数据类型无法操作。

④ FreeMarker的缺点四,FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。

2、取值方式(取值时可进行基本运算)

2.1 如何取值

${var}来取值

2.2 如何处理取null或不存在的值

如果值为null或者变量不存在,则可以{var!}来取值,'!'后面可以加默认值,当var为null时,则显示默认值{var!默认值}

Date类型格式化和判空可组合使用,${date!?String('yyyy-MM-dd')},表示若date变量存在或不为null,就按照之后的函数格式化

2.3 对于list、map对象的循环遍历

① list

<ul>

<#list userlist as user>

<li>${user}</li>

</#list>

</ul>

② map

<ul>

<#list map?keys as key>

<li>${key}:${map[key]}</li>

</ul>

2.4 取包装对象的值

${User.name},'!'可判断最近的变量是否为null或是否存在,${User.name!}中'!'只判断了name,若User为空的话还是会报错

解决方法:
① ${(User.name)!},给整体加上括号后,'!'号会逐个判断括号内的变量,而后再输出
②用if来判断

2.5 取Date类数值

${date?String('yyyy-MM-dd')}

其中'?'的作用是调用Freemaker函数

date格式化可以在配置文件中配置,也可以在前台设置${date?String('yyyy-MM-dd')}

如果Date格式化配置在文件中,则Freemaker可以解析java.sql.Date,不解析java.unti.Date

若配置在前台页面,则java.sql.Date、java.unti.Date都可以格式化

2.6 转义HTML内容

${var?html}

例如我后台输出的文本为"<a>我是一个链接<a/>",如果前台取值方式为{var},则前台就将"<a><a/>"解析成html语言了,如果取值方式为{var?html},则前台就将"<a><a/>"作为普通文本输出出来了

2.7 boolean类型的format

因为Freemaker不允许在前台输出true、false,所以可以通过配置将true、false格式化成其他的字符输出,例如格式化成yes、no

格式化可以在配置文件中配置,也可以在前台设置${boolval?string('yes','no')}

3、赋值运算

3.1 赋值

<#assign a = 100/>

3.2 运算


a + 100 = <font>${a + 100}</font>

4、逻辑函数

4.1 if、if else、if else if

① if

<#if var == 100>

<font>var真的等于100</font>

</#if>
<#if userlist??>

<font>userlist是否存在</font>

</#if>

<#if userlist?exists>

<font>userlist是否存在</font>

</#if>

if+??或者if+?exists用来判断条件对象是否存在

② if else

<#if var == 100>

<font>var真的等于100</font>

<#else>

<font>var不等于100</font>

</#if>

③ if else if


<#if var &gt; 99>

<font>var大于100</font>

<#elseif var == 99>

var等于99

</#if>

④ if多条件之间可以添加"&&"、"||"、"!"来作为条件判断

4.2 switch case break default

switch还支持string类型,;例如<#assign var = 'java'/>


<#assign var = 10/>

<#switch var>

<#case 10>

10

<#break>

<#case 20>

20

<#break>

<#default>

other

</#switch>

相关文章

网友评论

      本文标题:2019-02-13 Freemaker学习笔记

      本文链接:https://www.haomeiwen.com/subject/tkueeqtx.html