`

freemarker常用技巧

阅读更多

1.   freemarker 简介

1.1. 概述

FreeMarker 允许 Java servlet 保持图形设计同应用程序逻辑的分离,这是通过在模板中密封 HTML 完成的。模板用 servlet 提供的数据动态地生成 HTML 。模板语言是强大的直观的,编译器速度快,输出接近静态 HTML 页面的速度。

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

   FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序

  虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMarker 生成页面,通过模板显示准备的数据

   FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件

   FreeMarker 与容器无关,因为它并不知道 HTTP Servlet FreeMarker 同样可以应用于非 Web 应用程序环境

   FreeMarker 更适合作为 Model2 框架(如 Struts )的视图组件,你也可以在模板中使用 JSP 标记库。

2.   freemarker 常用技巧

2.1. 截取字符串

有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的列子就可以自定义显示的长度

< lt . <= lte. > gt. >= gte

<#if jstbqkVO.gzdd?length lt 8>
           <a href>${jstbqkVO.gzdd?default("")}</a>
      <#else>
           <a href title="${jstbqkVO.gzdd}">${jstbqkVO.gzdd[0..3]?default("")}...</a>
</#if>

意思就是如果这个字符串的长度小于 8 ,那么就正常显示,反之则取 4

       

2.2. 连接字符串

${"Hello," + user + "!"}    // 输出结果为 :hello,gs!

                      

2.3. 日期格式和 boolean 类型,转化为 string 类型

例子 1:

                                     ${.now?string("yyyy-MM-dd HH:mm:ss zzzz")}     

                                     ${.now?string("EEE,MMM d, ''yy")}

                                     ${.now?string("EEEE,MMM dd,yyyy, hh:mm:ss a '('zzz')'")}

                                     输出结果如下 :

                                               2003-04-08 21:24:44 Pacific Daylight Time

                                               Tue,Apr 8,'03

                                               Tuesday,April 08,2003,09:24:44 PM (PDT)

                           

                            例子 2:

                                     <#assign foo=true/>

                                     ${foo?string("yes","no")}         // 输出结果 :yes

2.4. 排序:

1. 升序 .sort_by()

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

2. 降序 .sort_by()?reverse

<#list list?sort_by(" 字段 ")?reverse as x>
</#list>

2.5. 去空格:

${xx?trim}

 

2.6. 数值精度控制

                            mX: 小数部分最小 X 位。

                     MX: 小数部分最大 X 位。

                     例子 :

                            <#assign x=2.582/>

                            <#assign y=4/>

                            #{x; M2}              //2.58

                            #{y; M2}              //4

                            #{x; m1M2}         //2.58

                                     #{y; m1M2}         //4.0

 

2.7. 特殊字符串的转义

\": 双引号         

\\: 反斜杠         

\r: 回车              

\b: 退格键

\': 单引号

\n: 换行             

\t:Tab                

\f:Form feed

\l:<           

\g:>          

\a:&         

\{:{

\xCode: 直接通过 4 位的十六进制数来指定 Unicode , 输出改 Unicode 对应的字符。

                      

2.8. 顶层变量

                            * 所谓顶层变量就是直接放在数据模型中的值。

                                     Map root = new HashMap();

                                     root.put("name","yeeku");     //name 是一个顶层对象

                            * 对于顶层变量 , 直接使用 ${variableName} 来输出变量值

             

2.9. 集合连接运算符

* 集合连接运算是将两个集合连接成一个新的集合 , 连接集合的运算符是 '+'.

                                     <#list [" "," "," "] + [" "," "," "] as x>

                                               ${x}

                                     </#list>

                            // 输出结果如下 :

                                               一二三四五六

2.10.   算术运算符

                            * 取整运算

                                     <#assign x=5>

                                     ${(x/2)?>int}     //2

                                     ${1.1?int}                   //1

                                     ${1.999?int}     //1

                                     ${-1.1?int}                  //-1

2.11.   比较运算符

                                =(==)         : 判断两个值是否相等

                                     !=               :............ 不相等

                                     >(gt)          : 判断左边是否大于右边

                                     >=(gte)     :.....

                                     <(lt)  :.....

                                     <=(lte)      :.....

2.12.   逻辑运算符

                                * 逻辑运算符只能作用于布尔值 , 否则将产生错误 .

                                     逻辑与 :&&

                                     逻辑或 :||

                                     逻辑非 :!

 

2.13.   内置函数

html: 字符串中所有的特殊 HTML 字符都需要用实体引用来代替(比如 < 代替 &lt;
cap_first:
字符串的第一个字母变为大写形式
lower_case:
字符串的小写形式
upper_case:
字符串的大写形式
trim:
去掉字符串首尾的空格

序列使用的内建函数:
size
:序列中元素的个数
数字使用的内建函数:
int:
数字的整数部分(比如 -1.9?int 就是 -1 9>. 空值运算符

length: 字符串的长度

string : 把其他格式的数据,转化为 string 类型

例:

${test?html}
${test?upper_case?html}

假设字符串 test 存储 ”Tom & Jerry” ,那么输出为:

Tom &amp; Jerry
TOM &amp; JERRY

${seasons?size}
${seasons[1]?cap_first}

${"horse"?cap_first}

假设 seasons 存储了序列 "winter", "spring", "summer", "autumn" ,那么上面的输出将会是:

4
Spring
Horse

2.14.   运算符优先级

                            * 推荐使用括号来决定运算优先级 .

                                     1>. 一元运算符 : !

                                     2>. 内建函数   : ?

                                     3>. 乘除法     : *,/,%

                                     4>. 加减法     : +,-

                                     5>. 比较              : <,>,<=,>=(lt,lte,gt,gte)

                                     6>. 相等              : ==(=),!=

                                     7>. 逻辑与         : &&

                                     8>. 逻辑或         : ||

                                     9>. 数字范围    : ..

        

 

 

2.15.   freemarker 判断返回值是否为空, null 的方法

对于 null ,或者 miss value freemarker 会报错
!
default value operator ,语法结构为: unsafe_expr!default_expr ,比如 ${mouse!"No mouse."} mouse 不存在时,返回 default value
(product.color)!"red"  
这种方式,能够处理 product 或者 color miss value 的情况;
product.color!"red" 将只处理 color miss value 的情况
??: Missing value test operator ,
测试是否为 missing value
unsafe_expr??
product.color?? 将只测试 color 是否为 null
(unsafe_expr)??
(product.color)?? 将测试 product color 是否存在 null
?exists:
旧版本的用法
比如: <#if mouse??>
   Mouse found
<#else>
   No mouse found
</#if>
Creating mouse...
<#assign mouse = "Jerry">
<#if mouse??>
   Mouse found
<#else>
   No mouse found
</#if>

2.16.     ftl 中嵌入另一个 controller

        <#assign c=JspTaglibs[ "http://java.sun.com/jsp/jstl/core" ] >

        <@c.import  url= "/product/hotlistByHttp.htm" />

 

3.   FreeMarker 编写规范与定义

3.1. 编写的指令必须用小写字母

<#if></if> 类似这样的都必须小写标示

3.2. 编写的指令不允许嵌套

:

<#list>

<#if flag>…

</#list>

</#if>

这样是不正确的,会引起报错

3.3. 在指令中 ,${..} 只能用于文本部分

下面的代码是错误的:

<#if ${isBig}>Wow!</#if><#if "${isBig}">Wow!</#if>

应该写成:

<#if isBig>Wow!</#if>

 

3.4. 表达式的约定

字符串

使用单引号或双引号限定

如果包含特殊字符需要转义,如下面的例子:

${"It's \"quoted\" andthis is a backslash: \\"}

It's "quoted" andthis is a backslash: \

数字

直接输入,不需要引号

布尔值

true false ,不使用引号

序列

由逗号分隔的子变量列表,由方括号限定,下面是一个例子:

<#list ["winter", "spring", "summer", "autumn"] as x>${x}</#list>

散列( hash

由逗号分隔的键 / 值列表,由大括号限定,键和值之间用冒号分隔,下面是一个例子:

{"name":"green mouse", "price":150}

键和值都是表达式,但是键必须是字符串  

3.5. 顶层变量的规范

顶层变量: ${variable} ,变量名只能是字母、数字、下划线、 $ @ # 的组合,且不能以数字开头

3.6. 操作符两边必须是数字

因此下面的代码是错误的:

${3 * "5"} <#-- WRONG! --> 

 

分享到:
评论
1 楼 fncj 2014-06-18  
好东西,

相关推荐

    FreeMarker页面制作规范

    #### FreeMarker常用技巧 1. **条件判断**:使用 `&lt;#if&gt;` 和 `&lt;#else&gt;` 结构来根据条件显示或隐藏内容。 2. **循环**:通过 `&lt;#list&gt;` 循环遍历集合或数组。 3. **自定义指令**:除了宏之外,还可以定义其他类型的...

    freemarker语法完整版

    ### Freemarker语法完整版知识点详解 #### A....通过以上详细解释,读者可以更好地理解Freemarker的核心概念、指令用法以及一些常见的技巧和注意事项,从而更高效地使用Freemarker进行模板渲染工作。

    freemarker 中午手册

    ### Freemarker 中文手册知识点详解 #### 一、Freemarker 概述 - **定义与功能**:Freemarker 是一款用纯 Java 编写的...通过上述知识点的介绍,希望能够帮助读者更好地理解和掌握 Freemarker 的基本概念和使用技巧。

    SSM框架freemarker的demo

    SSM框架,全称为Spring、SpringMVC和MyBatis的组合,是Java Web开发中常用的三大组件。在这个"SSM框架freemarker的demo...通过学习和实践这个示例,开发者可以更好地理解和应用SSM框架,并掌握FreeMarker的使用技巧。

    FreeMarker_Manual_zh_CN

    - **必要的XML处理**:常用XML处理技巧。 - **声明的XML处理**:高级XML处理技巧。 #### 五、参考文档 - **内建函数参考文档**:详细介绍FreeMarker提供的内置函数。 - **指令参考文档**:详细列出FreeMarker支持...

    freemarker

    4. **Freemarker的常用技巧**: - 使用`?default`处理空值,如`${variable?default("default value")}`。 - `?string`转换为字符串,避免输出null。 - `?html`防止XSS攻击,自动转义特殊字符。 - `?eval`执行...

    FreeMarker教程

    内建函数部分涵盖了处理字符串、数字、日期、布尔值、序列、哈希表和XML节点的内建函数,以及一些不常用或者专家级的内建函数。指令参考文档则包含了if、else、elseif、switch、case、default、break、list、include...

    freemarker中文手册

    二、常用Freemarker标签 1. `${...}`:这是Freemarker的表达式标签,用于输出变量的值。例如`${user.name}`将输出用户对象的name属性。 2. `&lt;#if ...&gt;` 和 `&lt;#else&gt;`:条件判断语句,用来根据条件决定是否渲染某个块...

    40种网页常用小技巧

    以下是一些基于JSP和Java的网页常用技巧,这些技巧涵盖了从优化性能到提升交互性等多个方面: 1. **使用JSP标签库**:JSTL(JavaServer Pages Standard Tag Library)和EL(Expression Language)能让你的代码更...

    freemarker(语法+实例)

    Freemarker是一个强大的Java模板引擎,它允许开发者将业务逻辑与视图层分离,使得HTML、XML等静态页面可以通过模板动态生成。以下是关于Freemarker语法...实际开发中,熟练掌握这些技巧将大大提高工作效率和代码质量。

    freemarker帮助手册

    Freemarker是一个强大的模板引擎,常用于Web应用中的视图层开发,特别是在Java环境中。...开发者可以通过阅读这些文档,掌握Freemarker的全部特性和使用技巧,从而更高效地开发出高性能的Web应用。

    Freemarker中文教程

    掌握常用的指令对于编写复杂模板非常重要。 3. **表达式**:表达式用于获取数据模型中的数据并将其插入到模板中。熟悉表达式的语法可以提高模板的灵活性和可维护性。 4. **插值**:即如何在模板中插入变量值的过程...

    FreeMarker开发指南

    以上只是FreeMarker的一部分内容,实际使用中还需要根据具体需求学习和掌握更多特性和技巧。FreeMarker的灵活性和强大功能使其成为Java Web开发中不可或缺的一部分,熟练掌握它能帮助开发者更高效地构建动态网页。在...

    springboot-bootstrap 后台管理系统.zip

    SpringBoot是由Pivotal团队开发的,旨在简化Spring应用的初始搭建以及开发过程,它集成了大量常用的第三方库配置,如JPA、Thymeleaf、RabbitMQ等,极大地提高了开发效率。 本项目的核心知识点包括以下几个方面: 1...

    freemark开发指南(入门)

    Freemarker是一款强大的Java模板引擎,它允许开发者将HTML页面设计和业务逻辑分离,从而让开发者专注于业务逻辑的实现,而...通过实践和不断学习,开发者可以掌握Freemarker的高级技巧,提升Web应用的开发效率和质量。

    springboot-integration-examples,springboot与其他常用技术的集成.zip

    总结,"springboot-integration-examples"是一个非常实用的学习资源,无论你是初识SpringBoot,还是希望进一步提升SpringBoot的使用技巧,都能从中受益匪浅。通过深入研究和实践,你将能够熟练掌握SpringBoot与各类...

    struts2大全 MVC框架

    Freemarker是Struts2常用的一个模板引擎,用于生成动态HTML或其他类型的输出。它是基于Java的,非Java代码的模板语言,允许开发者将视图与控制逻辑分离。freeMarker_total.rar可能包含了完整的Freemarker教程,包括...

    hibernate_spring_struts框架资料

    3. "Struts+Hibernate+Spring集成开发宝典.pdf":这可能是一本详细指南,专注于SSH框架的集成,包含了从基础到高级的集成技巧和最佳实践。 4. "struts.hibernate.spring整合.pdf":这个PDF文件可能是关于如何整合...

    Spring全家桶核心篇:SpringBoot快速入门 源码

    其对于Spring Boot的最常用的第一个小程序、JavaConfig和常见注解、启动改变、热部署、Springboot整合Thymeleaf/freemarker/JSP、异常处理、配置文件、日志、国际化等都使用案例进行了说明,并且在最后通过一个贯穿...

    freemaker 中文开发手册

    本章节将详细介绍Freemaker的基础概念、核心指令以及一些实用技巧,帮助开发者更好地理解和应用这一工具。 #### 二、核心概念与指令 ##### 1. 核心概念 - **Sequence (序列)**:对应于Java中的List或数组等非键值...

Global site tag (gtag.js) - Google Analytics