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("&","&amp;")/>

${title}的值为111&lt;111&gt;111&amp;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模板引擎 常用标签相关推荐

  1. freemarker常用标签 ftl模板文件常用标签

    freemarker常用标签 ftl模板文件常用标签 1.注释 <#–-–>格式不会输出 2 list循环 <#list datalist as entity>     ${e ...

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

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

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

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

  4. Java项目中利用Freemarker模板引擎导出--生成Word文档

    应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 资源下载:https://download.csdn.net/download/weixin_41367523 ...

  5. freemarker模板引擎,页面404,没有任何错误信息提示

    一.问题描述 freemarker模板引擎,页面404,没有任何错误信息提示,如下图所示,404首先排除页面是否存在,这个肯定是存在的,在一个排除下路径是否写错了,这个也没有问题,前面都能访问好好的, ...

  6. struts2 html模板,使用FreeMarker模板引擎作为Struts2的视图技术

    FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输 出.FreeMarker可以提供昜好的团队协作,对于界 ...

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

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

  8. 使用freemarker模板引擎导出word文件

    目录 第一步:创建Word模板 第二步:整理好数据,核对好数据要填充的位置 第三步:使用工具类生成word文件 工具类: 第一步:创建Word模板 创建需要的模板 另存为:单一网页文件 文件名最好改为 ...

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

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

最新文章

  1. 做行业研究时如何获取相关数据?
  2. Bio-protocol实验视频大赛中奖率提升至100%
  3. 数据揭秘清华研究生日常!47%单身,50.7%从未打过游戏...
  4. 大话软件测试与职业生涯
  5. 企业网站优化如何提升网站收录?
  6. [AI开发]目标检测之素材标注
  7. Linux虚拟机NAT模式设置固定ip
  8. 20+ Rsync command’s switches and common usages with examples – Unix/Linux--reference
  9. Selenium 自动化测试之道--Maven-TestNG
  10. TensorFlow HOWTO 2.2 支持向量回归(软间隔)
  11. SAP License:大陆SAP用户清单
  12. [原创]Eclipse 安卓开发几个异常的处理办法
  13. Oracle 写存储过程的一个模板还有一些基本的知识点
  14. PyCharm 入手第一记
  15. VS2017专业版和企业版激活密钥
  16. 渗透测试-postmessage xss
  17. sosoapi 安装配置
  18. 支持团队开发的UML建模和CASE工具MagicDraw
  19. 钓鱼网站检测技术的演进
  20. 使用android studio 连接海马玩模拟器

热门文章

  1. ajax请求url 绝对路径与相对路径
  2. 漫画: 什么是外部排序?
  3. 【Numpy学习记录】np.cov详解
  4. The type java.lang.Object cannot be resolved
  5. Java路径问题最终解决方案—可定位所有资源的相对路径寻址
  6. 【Nutch2.2.1源代码分析之5】索引的基本流程
  7. 常见优化算法批量梯度下降、小批量梯度下降、随机梯度下降的对比
  8. 深入理解Spark 2.1 Core (二):DAG调度器的原理与源码分析
  9. mysql索引篇之覆盖索引、联合索引、索引下推
  10. 在线机器学习FTRL(Follow-the-regularized-Leader)算法介绍