公司的平台通过freemarker来生成html,需要对freemarker的语法进行熟悉以及了解;再此记录下学习的过程。
业务数据模板第一次解析用到的freemark语法如下:
1.需要第二次才进行解析的代码用noparse标签包裹
<#noparse>
<#setting number_format="#">
<#assign xxx=bean.xxx?eval>
</#noparse>
2.查询头
具体的顶部按钮,第二次进行解析:
<#--查询头-->
<div class="panel-top">
<div class="tbar-title">
<span class="tbar-label">${bean.name}</span>
</div>
<div class="panel-toolbar">
<div class="toolBar">
<#if hasCondition>
<div class="group"><a class="link ajaxSearch" href="#" οnclick="aasd(this)"><span></span>查询</a></div>
<div class="l-bar-separator"></div>
</#if>
<#if hasManage>
<#noparse><#list manageFields as manage>
<@genToolBar gendex='${manage_index}' manage=manage managePermission=managePermission actionUrl=actionUrl/>
</#list></#noparse>
</#if>
</div>
</div>
3.查询条件解析
通过自定义宏命令,生成自定义查询区域
<#if hasCondition >
<div class="panel-search">
<form id="searchForm" name="searchForm" method="post" action="<#noparse>${searchFormURL}</#noparse>">
<#--查询条件-->
<#if conditionFields?if_exists>
<ul class="row">
<#list conditionFields as field>
<li>
<@genCondition field=field formatData=formatData/>
</li>
</#list>
</ul>
</#if>
</form>
</div>
</#if>
4.数据表头
含有ftl命令,且需要第二次才解析的代码块,需要使用<#noparse>标签包裹,
<tr>
<#noparse>
<#if checkbox>
<th> <input id="chkall" type="checkbox"></th>
</#if>
</#noparse>
<#noparse>
<th>序号</th>
</#noparse>
<#-- 显示字段-->
<#list displayFields as field>
<#noparse><#if permission.</#noparse>${field.name}<#noparse>></#noparse>
<th>
<#if field.type!="clob">
<#noparse>
<a href="#" οnclick="linkAjax(this)" action="${pageURL}&${tableIdCode}__ns__=</#noparse>${field.name}<#noparse>"></#noparse>
${field.desc}<#noparse><#if (sortField?? && sortField=="</#noparse>${field.name}<#noparse>")><#if (orderSeq=="ASC")>↑<#else>↓</#if></#if>
</a>
</#noparse>
<#else>
${field.desc}
</#if>
</th>
<#noparse></#if></#noparse>
</#list>
<#if hasManage>
<th width="80px">管理</th>
</#if>
</tr>
4.数据体
<#noparse>
<#list bpmDataTemplate.list as data>
<tr class="<#if data_index % 2 == 0>odd</#if><#if data_index % 2 == 1>even</#if>" align="center">
<#if checkbox>
</#noparse>
<td style="width:30px;">
<input class="pk" type="checkbox" value="<#noparse>${data.</#noparse>${pkField}<#noparse>}</#noparse>" name="${pkField}">
</td>
<#noparse>
</#if>
</#noparse>
<#--序号-->
<#noparse><td style="width:30px;">${data_index+1}</td> </#noparse>
<#list displayFields as field>
<#noparse><#if permission.</#noparse>${field.name}<#noparse>></#noparse>
<td>
<#noparse>${data.</#noparse>${field.name}<#noparse>}</#noparse>
</td>
<#noparse></#if></#noparse>
</#list>
<#if hasManage>
<td class="rowOps">
<#noparse><#list manageFields as manage>
<@genManage mindex='${manage_index}' manage=manage managePermission=managePermission actionUrl=actionUrl pk=data.</#noparse>${pkField}<#noparse>/>
</#list></#noparse>
</td>
</#if>
</tr>
<#noparse></#list></#noparse>
</table>
5.脚本解析
function getParam(name){
switch(name){
<#list manageFields as manage>
case '${manage_index}_${manage.name}':
<#if manage.paramscript!=null&&manage.paramscript!=''>
${manage.paramscript};
<#else>
return true;
</#if>
break;
</#list>
}
}