freemarker模板引擎 常用标签
freemarker资料!
http://freemarker.org/index.html
freemarker正常生成HTML的模板引擎,公司需求将书籍来源的数据发放到不同的渠道,每个渠道生成特定的模板,这样数据自动生成相应的格式,主要是生成xml格式,所以根据网上的Demo改成了对应项目测试的Demo.--------------------此为背景。
正常的模板文件.flt的,但是发现改成.xml格式的也完全没有问题,我表示非常高兴,哇卡卡卡~
网上有很多标签大全,我就捡我用过的标签写:(不断的补充ing。。。)
1.<#if></#if>
<#elseif> 跟java的if else一个意思,后面加表达式, if 和elseif 最后公用一个</#if>结束标签。
freemarker对于null值要求非常严格,会报错,所以所有值必须加判断是否存在<#if (metadata.EISBN)!""> 我是这么用的,还有别的方法 回头把标签大全粘过来~~~
2.<#list></#list>
循环这个标签非常好用,<#list Onix as metadata>
item_index:当前变量的索引值
item_has_next:是否存在下一个对象 其中item名称为as后的变量名,如stu
3.<#assign/>
<#assign s="sss"/>这是正常声明一个字符串
<#assign l=0..100/>这是声明一个int区间的集合
<#assign s=audience.audienceValue/>这是取root里面的值
4.${exp}插值,里面直接放表达式
${.now?string("yyyyMMdd")} 这是新加的标签,表示当前时间,后面可以生成不同格式的。
5.字符串处理(跟java的都一样)
?split("-")根据"-"将字符串分成list
?index_of("-")判断是否存在字符串"-",存在返回下表,不存在返回-1
6.<#--> </#-->注释标签
目前就用了这么多标签就搞定了
如果要输出一个集合,那么就必须先了解freemarker中的循环、判断等流程语法
if判断流程语法
基本语法
<#if boolean></#if>
或者<#if boolean><#else></#if>
或者<#if boolean>
<#if boolean></#if>
</#if>
或者<#if boolean><#elseif boolean></#if>
其中第三种你应该这么理解,先去除最后的</#if>那只看前面的,就是这个逻辑,如果怎么样,否则如果怎么样,最后的</#if>你可以理解成仅仅是一个结束的标志,没有任何逻辑含义。
比如
<#if product.id<10>-------------如果id小于10
该产品ID<10
<#elseif product.id==12>--------否则如果id等于12
该产品ID==12
</#if>----------------------------结束标志
Eg:将上面的例子修改下
<#if product.id<10>-------------如果id小于10
该产品ID<10
<#elseif product.id==1>--------否则如果id等于1
该产品ID==12
</#if>----------------------------结束标志
大家觉得逻辑对吗?如果id小于10,否则id等于1,逻辑不对。
那我想实现判断的嵌套呢?也很简单,如下
<#if product.id<10>
该产品ID<10
<#if product.id==1>
该产品ID==1
</#if>
</#if>
那么支持boolean的比较运算符有哪些呢?
比较预算符有
a、=(或者==):判断两个值是否相等.
b、!=:判断两个值是否不相等
c、 >(或者gt):判断坐标值是否大于右边值
d、 >=(或者gte):判断坐标值是否大于等于右边值
e、 <(或者lt):判断左边值是否小于右边值
f、 <=(或者lte):判断左边值是否小于等于右边值
刚才我们说的if else逻辑的布尔值都是比较预算符结果,还有多个条件的逻辑预算符呢?先来看看逻辑预算符有哪些吧。逻辑预算符有&&(与)、||(或)、!(非)
通过一个例子来看看
<#if product.id<10&& !product.name ??>
该产品ID<10,且产品名(${product.name})为空
</#if>
第一点,我们需要看的是&&,没有难度吧,就是两个条件均为true才执行
第二点,需要说明的是??,这里就牵扯掉有一个特殊的问题,就是在freemarker中,如何判断一个字符串为空呢?方法就是用??(?if_exists,?exists) 如果不为空返回true,否则返回false
第三点,需要看的是!,这点也没有疑问吧,取反,逻辑预算符
逻辑运算符有三个,我们演示了两个了,剩下一个或也很简单。
xml文档转义字符
<#assign title="111<111>111&1111"?xhtml?replace("&","&")/>
${title}的值为111<111>111&1111
OK~
在内部,模板中可用的变量都是实现了freemarker.template.TemplateModel接口的Java对象。但在你自己的数据模型中,可以使用基本的Java集合类作为变量,因为这些变量会在内部被替换为适当的TemplateModel类型。这种功能特性被称作是object wrapping对象包装。对象包装功能可以透明地把任何类型的对象转换为实现了TemplateModel接口类型的实例。这就使得下面的转换成为可能,如在模板中把java.sql.ResultSet转换为序列变量,把javax.servlet.ServletRequest对象转换成包含请求属性的哈希表变量,甚至可以遍历XML文档作为FTL变量。
模板实现时会将非TemplateModel对象替换为TemplateModel对象。通过ObjectWrapper实现类的 的 TemplateModeal wrap(java.lang.Object)方法实现。
ObjectWrapper.DEFAULT_WRAPPER:它使用SimpleScalar来替换String,SimpleNumber来替换Number,SimpleSequence来替换List和数组,SimpleHash来替换Map,TemplateBooleanModel.TRUE或TemplateBooleanModel.FALSE来替换Boolean,freemarker.ext.dom.NodeModel来替换W3C组织定义的DOM模型节点类型。对于Jython类型的对象,包装器会调用freemarker.ext.jython.JythonWrapper。而对于其他对象,则会调用BEAN_WRAPPER。
ObjectWrapper.BEANS_WRAPPER:它可以通过Java 的反射机制来获取到Java Bean的属性和其他任意对象类型的成员变量。
freemarker.template.TemplateException: Expected hash. mainKey evaluated instead to freemarker.template.SimpleScalar on line 32, column 19 in evertrip/diyquote/test.ftl.报这个错 说明数据转换有问题 不能转换成freemarker认可的格式
model.addAttribute("endtime", time);time为Date类型 flt中 ${begintime?string("yyyy-MM-dd")}就会报错 ${begintime?date("yyyy-MM-dd")}正常 反之一样
转载于:https://www.cnblogs.com/joycelishanhe/p/3731688.html
freemarker模板引擎 常用标签相关推荐
- freemarker常用标签 ftl模板文件常用标签
freemarker常用标签 ftl模板文件常用标签 1.注释 <#–-–>格式不会输出 2 list循环 <#list datalist as entity> ${e ...
- 利用freemarker模板引擎进行word导出
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现 ...
- Java Email 发HTML邮件工具 采用 freemarker模板引擎渲染
Java Email 发HTML邮件工具 采用 freemarker模板引擎 1.常用方式对比 Java发送邮件有很多的实现方式 第一种:Java 原生发邮件mail.jar和activation.j ...
- Java项目中利用Freemarker模板引擎导出--生成Word文档
应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 资源下载:https://download.csdn.net/download/weixin_41367523 ...
- freemarker模板引擎,页面404,没有任何错误信息提示
一.问题描述 freemarker模板引擎,页面404,没有任何错误信息提示,如下图所示,404首先排除页面是否存在,这个肯定是存在的,在一个排除下路径是否写错了,这个也没有问题,前面都能访问好好的, ...
- struts2 html模板,使用FreeMarker模板引擎作为Struts2的视图技术
FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输 出.FreeMarker可以提供昜好的团队协作,对于界 ...
- Freemarker模板引擎学习,生成html里的动态表格,可合并单元格
需求:现有html模板,需动态填充数据,并且包含表格,表格大小不固定,根据数据多少确定表格大小. 解析:两种方案: 1.java代码实现:将模板文件读出为StringBuffer,找到特定位置,循环生 ...
- 使用freemarker模板引擎导出word文件
目录 第一步:创建Word模板 第二步:整理好数据,核对好数据要填充的位置 第三步:使用工具类生成word文件 工具类: 第一步:创建Word模板 创建需要的模板 另存为:单一网页文件 文件名最好改为 ...
- freemarker模板引擎的使用教程
1.添加依赖 在pom.xml依赖文件中以下添加freemarker的依赖,当然也可以在新建springboot项目时直接选择 <dependency><groupId>org ...
最新文章
- 做行业研究时如何获取相关数据?
- Bio-protocol实验视频大赛中奖率提升至100%
- 数据揭秘清华研究生日常!47%单身,50.7%从未打过游戏...
- 大话软件测试与职业生涯
- 企业网站优化如何提升网站收录?
- [AI开发]目标检测之素材标注
- Linux虚拟机NAT模式设置固定ip
- 20+ Rsync command’s switches and common usages with examples – Unix/Linux--reference
- Selenium 自动化测试之道--Maven-TestNG
- TensorFlow HOWTO 2.2 支持向量回归(软间隔)
- SAP License:大陆SAP用户清单
- [原创]Eclipse 安卓开发几个异常的处理办法
- Oracle 写存储过程的一个模板还有一些基本的知识点
- PyCharm 入手第一记
- VS2017专业版和企业版激活密钥
- 渗透测试-postmessage xss
- sosoapi 安装配置
- 支持团队开发的UML建模和CASE工具MagicDraw
- 钓鱼网站检测技术的演进
- 使用android studio 连接海马玩模拟器
热门文章
- ajax请求url 绝对路径与相对路径
- 漫画: 什么是外部排序?
- 【Numpy学习记录】np.cov详解
- The type java.lang.Object cannot be resolved
- Java路径问题最终解决方案—可定位所有资源的相对路径寻址
- 【Nutch2.2.1源代码分析之5】索引的基本流程
- 常见优化算法批量梯度下降、小批量梯度下降、随机梯度下降的对比
- 深入理解Spark 2.1 Core (二):DAG调度器的原理与源码分析
- mysql索引篇之覆盖索引、联合索引、索引下推
- 在线机器学习FTRL(Follow-the-regularized-Leader)算法介绍