Freemarker 基础语法使用 相关容易错误知识点 每个用法都写了demo代码 值得一看^_^

1:FreeMarker语言概述

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

Figure

这种方式通常被称为 MVC (模型 视图 控制器) 模式,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。

而FreeMarker最初的设计,是被用来在MVC模式的Web开发框架中生成HTML页面的,它没有被绑定到 Servlet或HTML或任意Web相关的东西上。它也可以用于非Web应用环境中。

2:FreeMarker特性

通用目标

能够生成各种文本:HTML、XML、RTF、Java源代码等等

易于嵌入到你的产品中:轻量级;不需要Servlet环境

插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等

你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

强大的模板语言

所有常用的指令:include、if/elseif/else、循环结构

在模板中创建和改变变量

几乎在任何地方都可以使用复杂表达式来指定值

命名的宏,可以具有位置参数和嵌套内容

名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突

输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换

通用数据模型

FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示

你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰

3:基本指令用法和错误的点

    3.1 处理不存在的变量&对象  用??来判断

   一个不存在的变量和一个是 null 值的变量, 对于FreeMarker来说是一样的,所以这里所指的"丢失"包含这两种情况。

//错误的写法
<#if test>  //如果在一个变量或者对象的时候 不加上判断为null的情况就会报错
</#if>


//正确的写法
<#if test ??>  //变量名后面通过放置 ?? 来询问一个变量是否存在。将它和 if 指令合并, 那么如果 user 变量不存在的话将会忽略整个问候的代码
</#if>

3.2 对象存在,对象中的变量值为null需要加  ?if_exists

//错误的写法

<#list test as item>  //item 是可以自定义的
    <li>${test.name}<li>
</#list>


//正确的写法
1:test首先需要判断是否为null
2: 要加上?if_exists   ?if_exists如果存在 返回该变量值,否者不输出 
3: test.name也要加上?if_exists判断
<#if test ??>
    <#list test?if_exists as item>  //item 是可以自定义的
        <li>${test.name?if_exists}<li>
    </#list>
</#if>

3.3 if 指令与比较运算符一起搭配  相关使用

表达式中支持的比较运算符有如下几种:
1. =(或者==):判断两个值是否相等;
2. !=:判断两个值是否不相等;
注: =和!=可以用作字符串、数值和日期的比较,但两边的数据类型必须相同。而且FreeMarker的比较是精确比较,不会忽略大小写及空格。
3. >(或者gt):大于
4. >=(或者gte):大于等于
5. <(或者lt):小于
6. <=(或者lte):小于等于
注: 上面这些比较运算符可以用于数字和日期,但不能用于字符串。大部分时候,使用gt比>有更好的效果,因为FreeMarker会把>解释成标签的结束字符。可以使用括号来避免这种情况。

1:判断2个值是否相等
<#if id == 0>   //也可以写成  <#if id = 0>或者<#if id == "0">  
</#if>

2:判断2个值不想等
<#if id != 0>   //也可以写成  <#if id != 0>或者<#if id != "0">  
</#if>

3:判断当前数字大于
<#if id > 0>   //也可以写成  <#if id gt 0> 
</#if>

4:判断当前数字大于等于
<#if id >= 0>   //也可以写成  <#if id gte 0> 
</#if>

5:判断当前数字小于
<#if id < 0>   //也可以写成  <#if id lt 0> 
</#if>

6:判断当前数字小于等于
<#if id <= 0>   //也可以写成  <#if id lte 0> 
</#if>

3.4 list 标签相关使用

   3.4.1  list 就是一个遍历输出数组的标签

//这里的test数组 只有3条数据记录
<#if test ??>
	  	<#list test?if_exists as item> //item自定义 随便写
		 	<li>${item.name}</li>	
	  	</#list>
</#if>

//页面输出结果的话就是

<li>小兰</li>
<li>小王</li>
<li>小谭</li>

 3.4.2 list  (长度,遍历,下标,嵌套,排序,)

默认设置当前数组为3
1:list遍历数组输出
<#if test ??>
	  	<#list test ?if_exists as item>
		 <li>${item.name}</li> //name是你的变量名称
	  	</#list>
</#if>

2:list获取每条数据的下标  _index为每条数据的下标 下标也是从0开始
<#if test ??>
	  	<#list test ?if_exists as item>
		 <li>${item_index}</li> 
	  	</#list>
</#if>

//页面输出就是
<li>0</li> 
<li>1</li> 
<li>2</li>

3:list对数组排序 升序&降序 
    3.1 升序

    <#list test?sort_by("字段") as item>  
    </#list>

    3.2降序  
    <#list test?sort_by("字段")?reverse as item>   
    </#list>  

4:list长度的判断   
<#if test??>
	  	<#list test?if_exists as item>
		  <#if (test?size == 6) > 6</#if>
		  <#if (test?size == 8) > 8</#if>	
	  	</#list>
  </#if>
    

3.5 split 字符串切割

<#if test ??>
   	 <#list test?split(",") as item>  //切割的字符是可以自己根据数据来指定的哈
   	 <td>年龄:${item}</td>
   	 </#list>
</#if>

3.6 list标签遍历map数据

<#if map2?exists>
       <#list map2?keys as key>
          key:${key}
       </#list>
</#if>

3.7基本数据类型 补充一下 

         1. 布尔型:等价于java中的boolean类型, 不同的是不能直接输出,可以转换成字符串再输出

         2. 日期型:等价于java中的Date类型, 不同之处在于不能直接输出,需要转换成字符串再输出

         3. 数值型:等价于java 中的int, float, double 等数值类型,有三种显示形式:数值型(默认) 、货币型、百分比型

         4. 字符串型:等价于java 中的字符串,有很多内置函数

         5. sequence 类型:等价于java中的数组,list,set 等集合类型

         6. hash 类型:等价于java 中的Map 类型

后续还会更新文章介绍相关的写法和注意点  谢谢阅读当前文章 期待你的评论文章不足之处。 我的博客网站:TAN博客

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码奴生来只知道前进~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值