公司的平台通过freemarker来生成html,需要对freemarker的语法进行熟悉以及了解;再此记录下学习的过程。
业务数据模板第二次解析用到的freemark语法如下:
- Freemark常用指令
- 分支控制-<#if></#if>
1)checkbox为Boolean型值
<#if checkbox>
<th> <input id="chkall" type="checkbox"></th>
</#if>
2)if的嵌套使用以及<#if><#else></#if>
<#if permission.xxx>
<th>
<a href="#" οnclick="linkAjax(this)" action="${pageURL}&${tableIdCode}__ns__=ynbh">
院内编号<#if (sortField?? && sortField=="")><#if (orderSeq=="ASC")>↑<#else>↓</#if></#if>
</a>
</th>
</#if>
- 循环迭代 <#list items as item>
items 是一个对象集合,item为当前循环的值,item_index为当前变量的索引值,item_has_next是否存在下一个对象
1)循环输出对象集合
<#list filterFields as field>
<li tabid="${field.key}" <#if field.key ==filterKey> class="l-selected"</#if>>
<a href="${field.url}" title="${field.name}">${field.desc}</a>
</li>
</#list>
2)使用了item_index
<#list manageFields as manage>
<@genToolBar gendex='${manage_index}' manage=manage managePermission=managePermission actionUrl=actionUrl/>
</#list>
- 不解析指令 <#noparse></#noparse>
- assign指令 <#assign name=value[in namespacehash]>
<#assign conditionFields=bpmDataTemplate.conditionField?eval>
<#assign filterFields=bpmDataTemplate.filterField?eval>
<#assign manageFields=bpmDataTemplate.manageField?eval>
setting指令 <#setting name=value>
name的值可以是: local:指定模板的使用国家及语言
number_format:格式化输出数字的格式;
主要用于指定freemarker的运行环境;
<#setting number_format="#">
- macro指令 <#macro name param1 param2 param3 ...paramN ><#macro>
name:用户自定义指令的名称;
param1 param2 param3 ...paramN :入口参数
<#--管理列-->
<#macro genManage mindex manage managePermission actionUrl pk>
<#--编辑-->
<#if manage.name == 'edit' >
<#if managePermission['${mindex}_edit']>
<a class="link edit" action="${actionUrl.edit}&__pk__=${pk}&__dbomFKName__=${dbomFKName}&__dbomFKValue__=${dbomFKValue}" οnclick="openLinkDialog({scope:this,isFull:false})" href="#">${manage.desc}</a>
</#if>
<#--删除-->
<#elseif manage.name == 'del' >
<#if managePermission['${mindex}_del']>
<a class="link del" href="${actionUrl.del}&__pk__=${pk}">${manage.desc}</a>
</#if>
<#--明细-->
<#elseif manage.name == 'detail' >
<#if managePermission['${mindex}_detail']>
<a class="link detail" action="${actionUrl.detail}&__pk__=${pk}" οnclick="openLinkDialog({scope:this,isFull:false})" href="#">${manage.desc}</a>
</#if>
</#macro>
使用:
<@genManage mindex='${manage_index}' manage=manage managePermission=managePermission actionUrl=actionUrl pk=data.ID/>
2.表达式
1)表达式可以放置在${},表名要输出表达式的值 ,${data.htlx}
2)表达式也可以页标签结合,<#if manage.name == 'edit' >
2.1直接指定值:略
2.2输出变量值
1)顶层变量:${pk}
2)list集合:${item[2]}输出第三个集合元素
3)Map:${actionUrl.print}或${actionUrl["print"]}
2.3 算术运算符:+,-,*,/,%
${data_index+1}
2.4比较运算符: = == ,!=,> gt,< it,>= gte ,<= ite
2.5逻辑运算符:&&,||,!
2.6内建函数:?函数名称
<#if bpmDataTemplate.list?size==0>?size:集合的元素个数
?eval:把字符当ftl代码看
<#assign displayFields=bpmDataTemplate.displayField?eval>
?if_exists:f_exists用来打印东西时用到,如果存在打印,不存在打印空字符串i
<#if actionUrl.start?if_exists>
??:用在逻辑判断
<#if (sortField?? && sortField=="xxx")>