一、简要概述

  1. Freemarker是一款模板引擎,是一种基于模版生成静态文件的通用工具,它是使用纯java编写的,一般用来生成HTML页面。
  2. 这段时间学习的主要是嵌套freemarker中的取值表达式及标签这块。

二、Freemarker模板文件
3. 主要有4个部分组成:

内容 描述
文本 直接输出的部分
注释 即<#–…-->格式不会输出
插值(Interpolation) 即${…}或者#{…}格式的部分,将使用数据模型中的部分替代输出
FTL指令 FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。
<html>
<body>
<#-- 注释部分 -->
<br>
<#-- 下面使用插值 -->
<h1>${val}</h1>
<p>Hello everyone:
<u1>
<#-- 使用FTL指令 -->
<#list users as user><li>${user.username} </li>
<#list>
<u1>
</body>
</html>

三、指令

  1. assign
    · 概要
    · 描述

概要

<#assign name1=value1 name2=value2 ... nameN=valueN>
或
<#assign same as above... in namespacehash>
或
<#assign name>capture this
</#assign>
或
<#assign name in namespacehash>capture this
</#assign>

描述
比如:变量 seq 存储一个变量/序列:

<#assign svcNums1 = ""/>
<#assign svcNums = []/>
  1. if/elseif/else
    · 概要
    · 描述

概要

<#if condition>...
<#elseif condition2>...
<#elseif condition3>...
...
<#else>...
</#if>

描述
你可以使用if,elseif 状语从句:else指令来条件判断是否越过模板的一个部分。 condition必须计算成布尔值,否则错误将会中止模板处理。elseif状语从句: else必须出现在if内部(也就是,在if的开始标签状语从句:结束标签之间)。 if中可以包含任意数量的 elseif(包括0个)而且结束时 else是任选的。例如:

只有if没有elseif和 else:
<#if x == 1>x是1
</#if>
只有if没有elseif但是有 else:<#if x == 1>x是1
<#else>x不是1
</#if>
有if和两个elseif但是没有 else:<#if x == 1>x是1
<#elseif x == 2>x是2
<#elseif x == 3>x是3
</#if>
有if和三个elseif还有 else:<#if x == 1>x是1
<#elseif x == 2>x是2
<#elseif x == 3>x是3
<#elseif x == 4>x是4
<#else>x既不是1也不是2也不是3也不是4
</#if>
要了解更多布尔表达式,可以参考:模板开发指南/模板/表达式。你(当然)也可以嵌套if指令:<#if x == 1>x是1<#if y == 1>y也是1<#else>但是y不是</#if>
<#else>x不是1<#if y <0>且y小于0</#if>
</#if>
  1. list/break
    · 概要
    · 描述

概要

list 指令执行在 list 开始标签和 list 结束标签 ( list 中间的部分) 之间的代码, 对于在序列(或集合)中每个值指定为它的第一个参数。 对于每次迭代,循环变量(本例中的 user)将会存储当前项的值。

循环变量(user) 仅仅存在于 list 标签体内。 而且从循环中调用的宏/函数不会看到它(就像它只是局部变量一样)。

描述
最简形式

<#list users as user><p>${user}
</#list>

开发中用到的嵌套形式

<#if svcNums?size gt 0 && prodOrderItems??><#list prodOrderItems as prodOrderItem><#if prodOrderItem.serviceOfferId == '4010100000'><#if prodOrderItem.ordProdInstAccNums??><#assign prodInstId = prodOrderItem.ordProdInstAccNums[0].prodInstId/><#if prodInstId?? && svcNums?seq_contains(prodInstId)><#assign svcNums1 = prodInstId?c><#break></#if></#if></#if></#list>
</#if>

4. seq_contains
辨别序列中是否包含指定值。它包含一个参数,就是来查找的值。比如:

<#assign x = ["red", 16, "blue", "cyan"]>
"blue": ${x?seq_contains("blue")?string("yes", "no")}
"yellow": ${x?seq_contains("yellow")?string("yes", "no")}
16: ${x?seq_contains(16)?string("yes", "no")}
"16": ${x?seq_contains("16")?string("yes", "no")}

将会输出:

"blue": yes
"yellow": no
16: yes
"16": no

开发中用到的形式如下:

<#assign flag = true/>
<#assign _uplink_code = ["DATA","XDATA","ROAM","XROAM","HKD","MB","EROAM"]>
<#if (ContractRoot.SvcCont.BusiMsg.customerOrders[0].orderAttrs)??><#list ContractRoot.SvcCont.BusiMsg.customerOrders[0].orderAttrs as custAttr><#assign uc = (custAttr.attrValue)?upper_case><#if custAttr.attrId == '91000130'><#if (_uplink_code)?seq_contains(uc)><#assign flag = false/><#break></#if></#if></#list>
</#if>
<#if !flag>false<#else>true</#if>
<#assign _flag_zh=false/>
<#assign _flag_en=false/>
<#list ContractRoot.SvcCont.BusiMsg.customerDetails.customerDetail.custAttrs as custAttrs>
<#--判断列表中属性值是否有中文或者列表中属性值既无中文也无英文,都返回true --><#if (custAttrs.attrValue == 'ZH')><#assign _flag_zh=true/><#break><#elseif custAttrs.attrValue == 'EN'><#assign _flag_en=true/><#break></#if>
</#list>
<#if _flag_zh || (!_flag_zh && !_flag_en)>true<#else>false</#if><#if custAttrs.attrValue != 'ZH'><#if custAttrs.attrValue != 'EN'><#assign _flag=true/></#if>
</#if>
<#assign i = 0/>
<#if ContractRoot.SvcCont.BusiMsg.customerOrders[0].offerOrderItems??>
[<#list ContractRoot.SvcCont.BusiMsg.customerOrders[0].offerOrderItems as offerOrderItems>
<#if offerOrderItems.serviceOfferId == '3010100000'>
<#if offerOrderItems.ordOfferInsts[0].offerType == '13' && offerOrderItems.ordOfferInsts[0].operType == '1000'>
<#assign accNum = offerOrderItems.ordOfferProdInstRels[0].accNum/>
<#assign i = i + 1/>
<#if i == 1>
${accNum}
<#else>
,${accNum}
</#if>
</#if>
</#if>
</#list>]
</#if>

Freemarker模板---引擎学习相关推荐

  1. Freemarker模板引擎学习,生成html里的动态表格,可合并单元格

    需求:现有html模板,需动态填充数据,并且包含表格,表格大小不固定,根据数据多少确定表格大小. 解析:两种方案: 1.java代码实现:将模板文件读出为StringBuffer,找到特定位置,循环生 ...

  2. Freemarker模板引擎

    模板引擎的实质就是将页面结构提前写好,然后将数据渲染到模板上生成一个静态页面,这样一来,下次就可以 直接访问静态文件,不用进行额外的获取数据的操作(例如:访问数据库),这样大大提升了网站的访问速度. ...

  3. freemarker模板引擎的使用教程

    1.添加依赖 在pom.xml依赖文件中以下添加freemarker的依赖,当然也可以在新建springboot项目时直接选择 <dependency><groupId>org ...

  4. Vert.x - SpringBoot 整合 vertx 使用 thymeleaf、freemarker 模板引擎

    一.模板引擎 在 SpringMVC 项目中使用模板引擎,使用较多的应该是 thymeleaf 及 freemarker 了吧,虽然现在前后端分离的浪潮已经席卷而来,但对于 SEO 或者 页面静态话来 ...

  5. Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎

    前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...

  6. velocity(vm)模板引擎学习介绍及语法

    velocity模板引擎学习 velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,( ...

  7. 利用freemarker模板引擎进行word导出

    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现 ...

  8. Java Email 发HTML邮件工具 采用 freemarker模板引擎渲染

    Java Email 发HTML邮件工具 采用 freemarker模板引擎 1.常用方式对比 Java发送邮件有很多的实现方式 第一种:Java 原生发邮件mail.jar和activation.j ...

  9. Java之利用Freemarker模板引擎实现代码生成器,提高效率

    开心一笑 [1.你以为我会眼睁睁的看着你去送死?我会闭着眼睛.2.给你讲个故事,从前有个笨蛋,他非常笨,别人问他问题他只会回答"没有",这个故事你听过吗?] 视频教程 大家好,我录 ...

最新文章

  1. WebKit、Gecko使用图形库
  2. 使用AsyncEnumerator简化异步操作
  3. 生命周期 用户可以操作dom_当面试官问:能否介绍下Vue生命周期时,该如何回答...
  4. 11月苹果移动设备份额TOP10:iPhone 6上榜居六
  5. 汽车短视频大行其道,新能源汽车平台杉车网如何“领风骚”?
  6. Openlayers 3计算长度和面积
  7. Nik Collection 4.2.0 for Mac(PS滤镜插件套装)
  8. linux从入门到精通 第2版 pdf
  9. openerp/odoo 权限解析
  10. 曲师大教务系统服务器,曲阜师范大学掌上教务
  11. POI导出excel出现excel无法打开文件“xxx.xlsx”,因为文件格式或文件扩展名无效的问题
  12. Educational Codeforces Round 123 (Rated for Div. 2)(ABCDE)
  13. 如何将Word/PDF转成高质量XML
  14. 地铁怎么坐才不能做反_地铁怎么坐,地铁怎么坐才不能做反
  15. java计算机毕业设计Web商铺租赁管理系统MyBatis+系统+LW文档+源码+调试部署
  16. 2014c语言二级考试题,2014年3月计算机二级C语言真题及答案
  17. 有激励才有动力:从多多益善的华为年终奖谈起
  18. Kubernetes部署(五):k8s项目交付----(2)配置中心
  19. w ndows只能安装到gpt磁盘,在EFI系统上Windows只能安装到GPT磁盘的解决方法
  20. 毕业设计 - 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

热门文章

  1. 安徽大学本科毕业论文答辩和论文选题PPT模板
  2. TA100 T3.7 TB(D)R
  3. Android蓝牙开发前序知识-经典蓝牙低功耗蓝牙区别
  4. 像《我是歌手》一样说我是程序员
  5. 《神经科学:探索脑》学习笔记(第2章 神经元和神经胶质细胞)
  6. 判断某日是一年中的第几天
  7. 加拿大移民政策调整,注意,这些可能会影响到你
  8. 《软件工艺》目录—导读
  9. Android使用Opengl录像时添加(动态)水印
  10. OpenGL导入3DS专题