精华内容
下载资源
问答
  • freemarker ftl模板语法和指令

    千次阅读 2019-11-23 17:13:00
    freemarker模板上主要由一下4个部分组成: 1、注释,即<#‐‐和‐‐>,介于其之间的内容会被freemarker忽略; 2、插值(Interpolation):即${..}部分,freemarker会用真实的值代替${..}; 3、FTL指令:和HTML...

    freemarker模板上主要由一下4个部分组成:

    1、注释,即<#‐‐和‐‐>,介于其之间的内容会被freemarker忽略;
    2、插值(Interpolation):即${..}部分,freemarker会用真实的值代替${..};
    3、FTL指令:和HTML标记类似,名字前加#予以区分,Freemarker会解析标签中的表达式或逻辑;
    4、文本,仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。

    FTL指令

    1. assign指令

    此指令用于在页面上定义一个变量

    (1)定义简单类型:

    <#assign linkman="周先生">联系人:${linkman}
    

    (2)定义对象类型:

    <#assign info={"mobile":"13301231212",'address':'北京市昌平区王府街'} >电话:${info.mobile}  地址:${info.address}
    

    2. include指令

    此指令用于模板文件的嵌套
    创建模板文件head.ftl

    <h1>郭豪信息网</h1> 我们修改test.ftl,在模板文件中使用include指令引入刚才我们建立的模板 ``` <#include "head.ftl"> ```

    3. if指令

    在模板文件上添加

    <#if success=true>
      你已通过实名认证
    <#else>  
      你未通过实名认证
    </#if>
    

    在代码中对str变量赋值

    map.put("success", true);
    

    在freemarker的判断中,可以使用= 也可以使用==

    4. list指令

    需求,实现商品价格表,如下图:

    (1)代码中对变量goodsList赋值

    List goodsList=new ArrayList();
    
    Map goods1=new HashMap();
    goods1.put("name", "苹果");
    goods1.put("price", 5.8);
    Map goods2=new HashMap();
    goods2.put("name", "香蕉");
    goods2.put("price", 2.5);
    Map goods3=new HashMap();
    goods3.put("name", "橘子");
    goods3.put("price", 3.2);
    goodsList.add(goods1);
    goodsList.add(goods2);
    goodsList.add(goods3);
    map.put("goodsList", goodsList);
    

    (2)在模板文件上添加

    ----商品价格表----<br>
    <#list goodsList as goods>
      ${goods_index+1} 商品名称: ${goods.name} 价格:${goods.price}<br>
    </#list>
    

    如果想在循环中得到索引,使用循环变量+_index就可以得到。

    5. 内建函数

    内建函数语法格式: 变量+?+函数名称

    5.1 获取集合大小

    我们使用size函数来实现,代码如下:

    共  ${goodsList?size}  条记录
    
    5.2 转换JSON字符串为对象

    我们通常需要将json字符串转换为对象,那如何处理呢?看代码

    <#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
    <#assign data=text?eval />
    开户行:${data.bank}  账号:${data.account}
    
    5.3 日期格式化

    代码中对变量赋值:

    dataModel.put("today", new Date());
    

    在模板文件中加入

    当前日期:${today?date} <br>
    当前时间:${today?time} <br>   
    当前日期+时间:${today?datetime} <br>        
    日期格式化:  ${today?string("yyyy年MM月")}
    

    运行效果如下:

    5.4 数字转换为字符串

    代码中对变量赋值:

    map.put("point", 102920122);
    

    修改模板:

    累计积分:${point}
    

    页面显示:

    我们会发现数字会以每三位一个分隔符显示,有些时候我们不需要这个分隔符,就需要将数字转换为字符串,使用内建函数c

    累计积分:${point?c}
    

    页面显示效果如下:

    6. 空值处理运算符

    如果你在模板中使用了变量但是在代码中没有对变量赋值,那么运行生成时会抛出异常。但是有些时候,有的变量确实是null,怎么解决这个问题呢?

    6.1 判断某变量是否存在:“??”

    用法为:variable??,如果该变量存在,返回true,否则返回false 

    <#if aaa??>
      aaa变量存在
    <#else>
      aaa变量不存在
    </#if>
    
    6.2缺失变量默认值:“!”

    我们除了可以判断是否为空值,也可以使用!对null值做转换处理 在模板文件中加入

      ${aaa!'-'}
    

    在代码中不对aaa赋值,也不会报错了,当aaa为null则返回!后边的内容-

    7. 运算符

    7.1 算数运算符

    FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , %

    7.2 逻辑运算符

    逻辑运算符有如下几个: 
    逻辑与:&&
    逻辑或:|| 
    逻辑非:! 
    逻辑运算符只能作用于布尔值,否则将产生错误 

    7.3 比较运算符

    表达式中支持的比较运算符有如下几个: 
    1 =或者==:判断两个值是否相等.
    2 !=:判断两个值是否不等.
    3 >或者gt:判断左边值是否大于右边值
    4 >=或者gte:判断左边值是否大于等于右边值
    5 <或者lt:判断左边值是否小于右边值
    6 <=或者lte:判断左边值是否小于等于右边值

    注意: =和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:

    <#if (x>y)> 
    
    展开全文
  • 2. 在 ftl 文件中通过 ${stack.findValue("@package.ClassName@staticMethod()")} 和 ${stack.findValue("@package.ClassName@staticField")} 的方式调用静态方法和访问静态变量。如果方法中需要传参数直接像调用...

        网上的说的方案有很多,大多数都比较麻烦,又要写 java 代码,又要加配置文件啥的。 本文介绍一种最简单的方式,不过只能在 struts2 环境中使用:

    1. 修改 struts.xml 配置文件,新增如下两行配置:

    <!-- 允许 OGNL 调用 java 方法 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    
    <!-- 允许 OGNL 调用静态 java 方法 -->
    <constant name="struts.ognl.allowStaticMethodAccess" value="true" />

    2. 在 ftl 文件中通过 ${stack.findValue("@package.ClassName@staticMethod()")} 和  ${stack.findValue("@package.ClassName@staticField")} 的方式调用静态方法和访问静态变量。如果方法中需要传参数直接像调用普通 java 那样传参就可以了。其中 stack 是 Struts2 的值栈对象。

    展开全文
  • FreeMarker FTL标签

    2018-04-28 23:58:34
    FreeMarker模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:&lt;#– … –&gt;格式部分,不会输出 3,插值:即${…}或#{…}格式的部分,将使用...

    FreeMarker Template Language(FTL)属于简单、专用的语言。

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:
    1,文本:直接输出的部分
    2,注释:<#-- … -->格式部分,不会输出
    3,插值:即${…}或#{…}格式的部分,将使用数据模型中的部分替代输出
    4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出

    注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析。

    基础语法

    1、字符输出

    emp是POJO,name是POJO的属性

    ${emp.name?if_exists}      // 变量存在,输出该变量,否则不输出
    ${emp.name!}            // 变量存在,输出该变量,否则不输出
    
    ${emp.name?default("xxx")}     // 变量不存在,取默认值xxx 
    ${emp.name!"xxx"}          // 变量不存在,取默认值xxx
    

    常用内部函数

    ${"123<br>456"?html}      // 对字符串进行HTML编码,对html中特殊字符进行转义
    ${"str"?cap_first}        // 使字符串第一个字母大写 
    ${"Str"?lower_case}        // 将字符串转换成小写 
    ${"Str"?upper_case}        // 将字符串转换成大写
    ${"str"?trim}              // 去掉字符串前后的空白字符
    

    注意:FreeMarker的html转义,可以防止跨站脚本攻击等问题

    字符串的两种拼接方式拼接

    ${"hello${emp.name!}"}     // 输出hello+变量名
    ${"hello"+emp.name!}       // 使用+号来连接,输出hello+变量名
    

    可以通过如下语法来截取子串:

    <#assign str = "abcdefghijklmn"/>
    
    // 方法1
    ${str?substring(0,4)}  // 输出abcd
    
    // 方法2
    ${str[0]}${str[4]}    // 结果是ae
    ${str[1..4]}        // 结果是bcde
    
    // 返回指定字符的索引
    ${str?index_of("n")}
    

    2、日期输出

    ${emp.date?string('yyyy-MM-dd')} //日期格式
    

    3、数字输出(以数字20为例)

    ${emp.name?string.number}     // 输出20
    ${emp.name?string.currency}    // ¥20.00 
    ${emp.name?string.percent}     // 20%
    ${1.222?int}            // 将小数转为int,输出1
    
    <#setting number_format="percent"/>    // 设置数字默认输出方式('percent',百分比)
    <#assign answer=42/>             // 声明变量 answer 42
    #{answer}             // 输出 4,200%
    ${answer?string}         // 输出 4,200%
    ${answer?string.number}   // 输出 42
    ${answer?string.currency}  // 输出 ¥42.00
    ${answer?string.percent}  // 输出 4,200%
    #{answer}            // 输出 42
    

    数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:
    mX:小数部分最小X位
    MX:小数部分最大X位

    如下面的例子:
    <#assign x=2.582/>
    <#assign y=4/>
    #{x; M2}    // 输出2.58
    #{y; M2}    // 输出4
    #{x; m2}    // 输出2.58
    #{y; m2}    // 输出4.0
    #{x; m1M2}  // 输出2.58
    #{x; m1M2}  // 输出4.0
    

    4、申明变量

    <#assign foo=false/> // 声明变量,插入布尔值进行显示,注意不要用引号
    ${foo?string("yes","no")} // 当为true时输出"yes",否则输出"no"
    

    申明变量的几种方式

    <#assign name=value> 
    <#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>
    

    5、比较运算符

    表达式中支持的比较运算符有如下几个:
    = 或 == :判断两个值是否相等.
    != :判断两个值是否不等.

    或 gt :判断左边值是否大于右边值
    = 或 gte :判断左边值是否大于等于右边值
    < 或 lt :判断左边值是否小于右边值
    <= 或 lte :判断左边值是否小于等于右边值

    6、算术运算符

    FreeMarker表达式中完全支持算术运算,
    FreeMarker支持的算术运算符包括:+, - , * , / , %
    注意:
    (1)、运算符两边必须是数字
    (2)、使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + “5”},结果是:35

    7、逻辑运算符

    逻辑运算符有如下几个:
    逻辑与:&&
    逻辑或:||
    逻辑非:!
    逻辑运算符只能作用于布尔值,否则将产生错误

    8、FreeMarker中的运算符优先级如下(由高到低排列):

    ①、一元运算符:!
    ②、内建函数:?
    ③、乘除法:*, / , %
    ④、加减法:- , +
    ⑤、比较:> , < , >= , <= (lt , lte , gt , gte)
    ⑥、相等:== , = , !=
    ⑦、逻辑与:&&
    ⑧、逻辑或:||
    ⑨、数字范围:…
    实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少


    参考文档:

    1. https://blog.csdn.net/pengpengpeng85/article/details/52070602
    展开全文
  • 问大家个问题,我用 freemarkerftl 模板生成 word。想在word 中显示图片。但一直没法显示。各位有了解得吗。
  • freemarker/ftl模板-样式种类

    千次阅读 2020-06-03 11:35:47
    <w:pPr> 段落样式------------------------------------------------ <w:jc w:val='center'/> 对齐方式 left,right center <w:tc>单元格样式----------------------------------------------- ...
    <w:pPr> 段落样式------------------------------------------------
    <w:jc w:val='center'/> 对齐方式 left,right center
    <w:tc>单元格样式-----------------------------------------------
    <w:gridSpan w:val="2"/>  左右合并2个单元格
    
    <w:vmerge w:val="restart"/> 上下合并单元格 开始标签 
    
    <w:vmerge/> 上下合并单元格 结束标签
    
    <w:vAlign w:val='center'/> 单元格水平居中
    
    <w:rPr> 表示一个样式串,指明它包括的文本的显示样式,表示一个特定的文本格式-------------------------------
    <w:color w:val="800000"/> 字体颜色设定
    <w:sz w:val="24"/>字体大小
    <wx:font wx:val="宋体"/> 字体类型

     

    持续更新...

     

     

     

    展开全文
  • freemarker ftl文件简单语法整理 应项目组要求修改PDF功能为word,这是使用freemarker,故将一些常用的语法整理进来 本文转载至 链接: freemarker 常见语法整理. 我的freemarker 整理使用教程及源码 链接: link. ...
  • 在现有模板上添加新表格数据 word 导出 2003版xml 和默认版本xml 是有区别的,如果已经创建好的ftl模板文件,后期维护添加图表,则必须使用同样版本的xml进行模板数据的追加。 一下说明下合并单元格标签是使用 1...
  • 将html转换成freemarker中的ftl模板,求代码,求模板
  • plan.getMemo().replaceAll("\r\n", "<w:br/>"))
  • freemarker常用标签 ftl模板文件常用标签 1.注释 &lt;#–…–&gt;格式不会输出 2 list循环 &lt;#list datalist as entity&gt;  ${entity.item!}... &lt;/#list&gt; 3 if条件判断 &...
  • Freemarkerftl模板遍历复杂Map的例子

    万次阅读 2013-11-21 15:17:20
    Freemarker支持遍历Map,现在写一个遍历类似Map>的方式 例如现在有这样一个Map userInfo = new HashMap(); userInfo.put("username","username"); Map map = new HashMap(); map.put("key","value"); userInfo.put...
  • Im using spring email with freemarker template engine to send email to customers. As part of the signature I would like to add an image, but can't seem to get the template to find the image. The email...
  • 此处只介绍word模板部分,java代码等请自行百度,都一样。 辅助工具:notepad++,百度在线xml格式化 A.不含遍历的简单处理 不含遍历的简单处理 简单的一个key一个值使用比较简单,主要包括几个步骤: 1. 新建...
  • FreeMarker FTL常用指令

    千次阅读 2019-02-25 17:34:28
    freemarker在线手册 assign指令 使用该指令你可以创建一个新的变量, 或者替换一个已经存在的变量。 定义简单类型 &lt;#assign linkman="张小姐"&gt; 联系人:${linkman} 定义对象类型 &...
  • 基于Freemarker模板的代码生成器实体映射xml的ftl模板文件
  • 用到的几个JAR包,freemarker-2.3.20.jar、itext-2.0.8.jar、core-renderer-R5pre1.jar。这几个包中,只有freemarker-2.3.20.jar在maven中央仓库里有,其他两个是从网上其他人分享的。 怎么把第三方jar包导入Maven...
  • ftl文件是freemarker模板文件,用freemarker时,常用该文件模板;但是该文件在eclipse编辑时,黑白底的,没有任何提示,下面介绍如何用JSP编辑器打开该文件。 工具/原料 eclipse开发工具 方法/步骤 ...
  • 其实在一开始创建word模板的时候就可以添加${String}绑定的字段,但是修改后缀名ftl后里面的内容回乱, 还要在页面中在修改,所以建议最后在修改ftl模板。 c. 开始写代码了,放在你想要调用的控制器下面就行:...
  • 主要是html生成pdf 用,我不是学美工的 所以css样式什么的... 我想要这类的模板: xxx(课程名称) xxxx(章节名称 eg:第一章) xxxxxxxxx(正文 ) xxxx(章节名称 eg:第二章) xxxxxxxxx(正文 ) 。。。。。。
  • FTL指令常用标签及语法 注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析。 freemaker注释:<#-- 注释内容 -->格式部分,不会输出 ---------------------------------- 基础语法 ------...
  • 关于怎么通过freemarker模板生成excel的文章很多,关键点在于怎么制作模板文件.ftl 网上的办法是: (1)把Excel模板的格式调好,另存为xml文件 (2)新建一个.ftl文件,把xml文件内容copy进去,把变量换成...
  • Sometimes I have to use the following snippet :Does freemarker have a directive that return the existense of some.ftl ?LikeOr can I implement such a directive by myself?解决方案OK. Resolved by user-...
  • 做一个简单的freemarker模板,然后一个简单的控制器跳转,特别说明一点,做WEB项目的时候如果静态资源放在自己的工程静态目录下,而没有用文件服务器之类的东西,一般不会直接写相对路径,什么../xxx.jpg这种,喜欢...
  • 前有java-poi替换模板文件word文档中的变量,生成Word文档,后有Java-Freemarker替换模板文件.ftl中的变量,生成Word文档。 Freemarker是如今最流行的文档处理组件,poi已经相对过时了。 FreeMarker 是一款模板...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,831
精华内容 6,332
关键字:

freemarkerftl模板图片