1、布尔值类型
boolen类型不能用true,false会报异常,两种解决方式:
(1)在配置文件中修改:(2)在前端页面中修改:
2、日期时间类型
freemarker不支持java.util.Date类型,支持java.sql.Date类型。 解决方式:
(1)可以在前台页面对java.util.Date类型进行转换: 日期:${dateVar?String('yyyy-MM-dd HH:mm:ss')}
(2)若是在配置文件中格式化,则如图。
3、NULL类型或不存在的变量
freemarker不能取空值,但可以控制 null: ${nullVar!'我是默认值(可选)'}
4、变量的赋值和运算
<#assign a=100>,${a+100} 变量赋值与运算。
5、自定义对象变量的取值
(1)${(userObj.name)!}给userObj.name加括号后再加!(判空符号)表示对整体进行判空,即现对userObj判空,存在后在对name进行判空。
${userObj.name!}如果单单这样去掉括号,只是就近原则,只对name作空判断处理,而不会对userObj判空处理。
(2)${var?html} 对var变量里的html标签进行转义,并输出富文本。
6、List取值
<#list mylist(注:集合名称) as item> ${item!}
如果集合中装的是对象,就使用 item.properties 对象 点 属性。
7、Map取值
<#list map_name?keys as key> ${key}(对key取值):${map_name[key](对value取值)} <#list>
8、If/elseif/else
<#if var > 99> //条件 大于99 var 大于 99 //打印显示数据,结果 <#elseif var== 99> //注意中间没有间隔 var == 99 //elseif就等于99,结果 <#else> var 小于99 //else 结果小于99 <#if> //有开始就有结束
(1)??或者?exists表示判断变量是否存在,用法为<#if var?exists>
(2)if多条件判断 使用逻辑与“&&”、或“||”、非“!”。
(3)变量?length 判断字符串的长度。
9、Switch/case/break/default(支持 string、int)
<#assign var=10/> <#switch var> <#case 10> 输出10 <#break> ..... <#default> 输出out </#switch>
Ps:必须要加break,否则哪怕case的值对不上,也会默认相等继续输出。
10、字符串,集合操作
<h1> 字符串操作: </h1> <ul> <#assign string1='hello,'/> <#assign string2='world'/> <li>连接:${string1+string2}</li> <li>截取:${(string1+string2)?substring(5,8)} --> 同java</li> <li>分隔:${(string1+string2)?split(',')[0]} --> 同java</li> <li>长度:${(string1+string2)?length }--> 同java</li> <li>大写:${(string1+string2)?upper_case}</li> <li>小写:${(string1+string2)?lower_case}</li> <!--首次出现位置--> <li>indexOf:${(string1+string2)?index_of('o')}</li> <!--最后出现位置--> <li>lastIndexOf:${(string1+string2)?last_index_of('o')}</li> <li>替换:${(string1+string2)?replace('w','xxx')}</li> </ul>
11、自定义函数
使用自定义函数:
(1)代码中定义:mv.addObject("sort_int",new SortMethod());
(2)模板中使用:
<#assign mylist=[1,2,3,4,5,6] /> <#list sort_int(mylist) as item> ${item} </#list>
(3)SortMethod扩展了Freemarker的TemplateMethodModelEx,重写exec方法。
SimpleSequence 代表是freemaker中一个数组,列表。
传入参数 arguments 是List集合,在传参的时候可以在前端代码中加入多个参数。
注意:传入参数类型需是 freemark 参数类型,然后再转为 Java 类型,否则直接转Java类型会报错。
<h1> 自定义函数: </h1> <ul> <#assign strings=[2,3,4,5,6,9,8,3,2,7]/> <li>未排序:</li> <#list strings as str> ${str} </#list> <li>已排序:--> 自定义排序在后台写 </li> <!--list sort_int(strings) as str>--> <li>已排序:--> 调用已存在的排序方法 -->升序</li> <#list strings?sort as str> <li>${str}</li> <li>输出list下标:${str_index}</li> </#list> <li>已排序:--> 调用已存在的排序方法 -->降序</li> <#list strings?sort?reverse as str> <li>${str}</li> <li>输出list下标:${str_index}</li> </#list> <li>list长度:${strings?size}</li> <li>下标取值:${strings[0]}</li> </ul>
Ps:
<#list myList?sort?reverse as item> // 调用排序,反序
${ietm_index} : ${item} // 下标 :值
${list?size} // 大小
${list?[index]} // index对应的下标值
Freemark 语法:
自带函数语法:“?函数”
自带属性语法:“_属性”