http://blog.csdn.net/chang_li/article/details/51913105

在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。

一、FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}

  1. <pre name="code" class="html">${book.name?if_exists } //用于判断如果存在,就输出这个值
  2. ${book.name!"xxx"}//默认值xxx
  3. ${book.date?string('yyyy-MM-dd')} //日期格式
  4. ${book?string.number} 20 //三种不同的数字格式
  5. ${book?string.currency} <#-- $20.00 -->
  6. ${book?string.percent} <#-- 20% -->
  7. ${.now?datetime}//当前时间戳


二、FreeMarker提供两个运算符来避免空值:1. !: 指定缺失变量的默认值;2. ??:判断变量是否存在。!运算符有两种用法:variable!或variable!defaultValue。第一种用法不给变量指定默认值,表明默认值是空字符串、长度为0的集合、或长度为0的Map对象。例子:

  1. <pre name="code" class="html"><#-- ${sss} 没有定义这个变量,会报异常! -->
  2. ${sss!} <#--没有定义这个变量,默认值是空字符串! -->
  3. ${sss!"abc"} <#--没有定义这个变量,默认值是字符串abc! -->

三、??运算符返回布尔值,如:variable??,如果变量存在,返回true,否则返回false。

将它和 if 指令合并,那么如果 user 变量不存在的话将会忽略整个问候代码段:

  1. <#if user??><h1>Welcome ${user}!</h1></#if>

四、Freemarker中对于javabean的处理跟EL表达式一致,类型可自动转化!非常方便!
有一点需要注意: ${..}只能用于文本部分作为字符串输出,不能用于判断真假值
也就是不能这么写:<#if ${isBig}>Wow!</#if> ,应为<#if isBig>Wow!</#if>

五、对list进行遍历以及if else判断

  1. 1)<table  width="100%">
  2. <#list investList as item>
  3. <tr>
  4. <td align="left" style="width:50%!important;">
  5. ${item.userName}<br>${item.addTime?string("yyyy-MM-ddHH:mm:ss")}
  6. </td>
  7. <td align="right" style="width:50% !important;">${item.money?string('0.00')}元<br/>
  8. <#if item.tenderType == 0>网站投标
  9. <#elseif item.tenderType == 1>自动投标
  10. <#elseif item.tenderType == 2>手机投标
  11. </#if>
  12. </td>
  13. </tr>
  14. </#list>
  15. </table>

2))

  1. <select name="awardTypeId" class="type">
  2. <option value="0" selected="selected">全部</option>
  3. <#if typeList??>
  4. <#list typeList as type>
  5. <option value="${type.id!}" >${type.name!}</option>
  6. </#list>
  7. </select>

3)assign指令用于为该模板页面创建或替换一个顶层变量,

  1. <#assign x="Hello ${user}!">

4)

  1. <#if data.list?size > 0>
 
 

freemarker插值的更多相关文章

  1. Freemarker中遍历List以及内置函数使用

    在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户. 那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢?一. Free ...

  2. java 根据word xml模板生成word

    这里用的是poi相关jar包以及freemarker插值技术实现,poi相关jar包这里不再述说 1,编辑word并保存为xml 2,把xml后缀改为ftl文件 3,前端代码 // alert(jso ...

  3. freemarker 取值(插值)(转)

    Java数据模型 1)基本数据类型取值 八种基本的java类型:byte.short.int.long:float,double:char:boolean 对应的封装类型:Byte.Short.Int ...

  4. FreeMarker的基础语法

    FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...

  5. FreeMarker模板开发指南知识点梳理

    freemarker是什么? 有什么用? 怎么用? (问得好,这些都是我想知道的问题) freemarker是什么? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生 ...

  6. Freemarker常用技巧

    1,截取字符串 有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度 < lt. <= lte. > gt. >= gte < ...

  7. FreeMarker标签与使用

    模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选 ...

  8. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...

  9. [转]一篇很全面的freemarker教程

    copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...

随机推荐

  1. python之函数用法iter()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法iter() #iter() #说明:对一个对象调用 iter() 就可以得到它的迭代 ...

  2. Log4net的配置-按照日期+文件大小混合分割

    ender name="DebugAppender" type="log4net.Appender.RollingFileAppender"><fi ...

  3. VC2012编译CEF3-转

    原文地址:http://blog.csdn.net/tiplip/article/details/42047815 下载 代码下载:http://cefbuilds.com/,CEF 3.2556.1 ...

  4. JavaScript的技巧和最佳实践

    JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发 (Node.js和Wakanda)等等.JavaScript还 ...

  5. 很轻很强大:轻量级桌面环境比较(转自linuxeden)

    这天你终于下定决心购买了一台流行的 Netbook ,与往常装机一样,直接安装心爱的 Linux 发行版.好不容易安装完成了,却发现平日启动飞快的应用程序在 Netbook 上怎么都跑不快.怎么办呢? ...

  6. JS中函数的 this 各种指向

    this是js的一个关键字,随着函数使用场合不同,this的值会发生变化.但是总有一个原则,那就是this指的是调用函数的那个对象. 情形1:如果一个函数中有this,但是它没有被上一级的对象所调用, ...

  7. android直接读取项目中的sqlite数据库

    最近项目中要实现android读取sqlite数据库文件,在这里先做一个英汉字典的例子.主要是输入英语到数据库中查询相应的汉语意思,将其答案输出.数据库采用sqlite3. 如图: 实现过程完全是按照 ...

  8. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...

  9. Python学习笔记010——递归函数

    1 递归定义 函数直接或间接调用函数本身,则该函数称为递归函数 2 递归特点 Python函数递归调用,会用到栈 – 这里的栈是函数/程序运行时系统为其分配的一段内存区 – 栈具有 后进先出 的特性 ...

  10. ant-jmeter批量脚本

    <?xml version="1.0"?> <project name="autotest" default="all" ...