freemarker学习--语法

来源:互联网 发布:ssd优化工具 编辑:程序博客网 时间:2024/06/07 08:03

   公司的平台通过freemarker来生成html,需要对freemarker的语法进行熟悉以及了解;再此记录下学习的过程。

业务数据模板第二次解析用到的freemark语法如下:

  1.   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="#" onclick="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>
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}" onclick="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}" onclick="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内建函数:?函数名称

?size:集合的元素个数
<#if bpmDataTemplate.list?size==0>
?eval:字符当ftl代码看
<#assign displayFields=bpmDataTemplate.displayField?eval>
?if_exists:f_exists用来打印东西时用到,如果存在打印,不存在打印空字符串i
<#if actionUrl.start?if_exists>
??:用在逻辑判断
<#if (sortField?? && sortField=="xxx")>

                                             
0 0
原创粉丝点击