参考文章:

Freemarker自定义标签的简单分析

定义一个基本的文本框:传入参数为:resourceName idName resourceVal="" idVal="" classVal="",其中resourceName ,idName为必填, resourceVal="" idVal="" classVal="" 分别为选填,其中必填都作为空间的 name,选填的都作为结果值,具体的见代码:

html中 macro自定义如下:

<#macro txtResource resourceName idName  resourceVal="" idVal="" classVal="">
<input type="text" name="${resourceName}" value="${(resourceVal)!}" class="${(classVal)!}" readonly="readonly"
style="cursor:pointer" /> &nbsp;<a class="xm_ablue" href="javascript:clearDicTree('${resourceName}','${idName}')">清空</a>
<input type="hidden" name="${idName}" value="${(idVal)!}"/>
<#-- 绑定输点击清空时的事件-->
<script>
function clearDicTree(resourceName,idName)
{
$("input[name='"+resourceName+"']").val('');
$("input[name='"+idName+"']").val('');
}
</script>
</#macro>

调用macro 控件:

<@txtResource resourceName="parentName" idName="parentId" resourceVal="张三" idVal="1" classVal="icon2"/>

界面展示效果

点击“清空”按钮,则清空文本框中的内容;点击文本框中js也可以写在控件定义的 html中

3.freemark中遍历Map:typeMap,todoMap 都是map,他们的key相同

<#if typeMap?exists>
       <#list typeMap?keys as key>
         <tr>
         <td colspan="4">
         <table width="100%" border="0" cellspacing="0" cellpadding="0" class="s_todoin">
             <#assign type = typeMap[key] />
             <tr>
             <th colspan="4"><div class="s_todotit s_todotitup" name="div_${type.businessCode}" onclick="javascript:clickTodoType('${type.businessCode}');">${type.name}</div></th>
             </tr>
              <#if todoMap?exists>
              <#assign todoList =todoMap[key] />
              <#list todoList as item>
               <tr name="tr_${type.businessCode}">
                 <td width="49%" class="s_todotd"><a href="${item.refUrl!}" target="_blank" title="${item.sheetTitle!}"><#if item.sheetTitle?? && ""!=item.sheetTitle>${item.sheetTitle}<#else>未知标题</#if></a></td>
                 <td width="15%">${item.nodeName}</td>
                 <td width="12%">${item.createUserName}</td>
                 <td width="24%" >${item.createTime['time']}</td>
               </tr>
               </#list>
               </#if>
         </table>
         </td>
         </tr>
       </#list>
     </#if>

4.freemark中遍历多维数组;

<#list oftenList as firstMenu>
   <div class="modle_usualcbw" name="often">
    <div class="modle_usualtcb" name="module">
      <input type="checkbox" value="${firstMenu.menuId}" <#if firstMenu.url?? && ""!=firstMenu.url>name="hasurl"</#if>  <#if firstMenu.userId??>checked="checked"</#if>/>${firstMenu.name}
    </div>
      <#if firstMenu.children?? && (firstMenu.children?size>0)>
                   <#assign secondMenus=firstMenu.children>
    <div class="modle_usualtcb2ws">
   
                   <#list secondMenus as secondMenu>
     <div class="modle_usualtcb2w" name="menu">
      <div class="modle_usualtcb2" name="secondMenu">
              <input type="checkbox" value="${secondMenu.menuId}" <#if secondMenu.url?? && ""!=secondMenu.url>name="hasurl"</#if> <#if secondMenu.userId??>checked="checked"</#if>/>${secondMenu.name}
       </div>
        <#if secondMenu.children?? && (secondMenu.children?size>0)>
         <#assign thirdMenus=secondMenu.children>
          <div class="modle_usualcb" name="thirdMenu">
           <ul>
           <#list thirdMenus as thirdMenu>
            <li>
              <input type="checkbox" value="${thirdMenu.menuId}" <#if thirdMenu.url?? && ""!=thirdMenu.url>name="hasurl"</#if>  <#if thirdMenu.userId??>checked="checked"</#if>/>${thirdMenu.name}
             </li>
           </#list>
           </ul>
          </div>
        </#if>
     </div>
     </#list>
    
    </div>
     </#if>
    
   </div>
 </#list>

5.freemark中数字和字符的格式:保留小数点后2位

<input  name='currentcost' value='#{(project.progress?default(0))*(project.budgetContractA?default(0))/100;M2}' readonly='readonly'>

具体见:http://talentkep.iteye.com/blog/510756

用freemarker定义宏实现自定义公用控件的更多相关文章

  1. Android Studio自定义组合控件

    在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太小 ...

  2. 安卓自定义组合控件--toolbar

    最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式. 使用的工具为android stud ...

  3. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  4. C# DataGridView自定义分页控件

    好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...

  5. 自定义圆形控件 RoundImageView

    1.自定义圆形控件 RoundImageView package com.ronye.CustomView; import android.content.Context; import androi ...

  6. 自定义圆形控件RoundImageView并认识一下attr.xml

    今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认为,多一种解决方式,就多一种举一反三的学 ...

  7. DuiLib 自定义识别控件

    遇到一个断点无法识别自定义的控件,运气比较好,一搜就搜出来了: 参考地址:http://www.bkjia.com/ASPjc/992050.html 主要是这个函数: CControlUI* CDi ...

  8. iOS开发UI篇—Quartz2D(自定义UIImageView控件)

    iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义 ...

  9. (九)ASP.NET自定义用户控件(2)

    http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...

随机推荐

  1. iOS 短视频开发总结二 AVCaptureSession

    开始录制短视频 录制完成 根据项目需求,对视频URL进行处理 基本原理和方法已经完成,具体细节根据项目实际需求再处理

  2. java开发命名规范

    使用前注意事项: 1.  由于Java面向对象编程的特性, 在命名时应尽量选择名词 2.  驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,首 ...

  3. Gnu C的不同于标准C的语法

    2. ,## 是与逗号合在一起用的, 表示后面有变量,则显示逗号,若后面无变量,则不显示逗号, 这种情况适用于用宏替换可变参数的函数,调用的时候可能传一个参数,或传两个参数, 这种打印语句在平台上,函 ...

  4. ArcGIS二次开发实践— — 遍历ToolBox中的工具!

    在AO中,打开“文件A”的基本流程是: 1.创建对应“文件A”类型的WorkspaceFactory: 2.用WorkspaceFactory创建“文件A”的Workspace,Workspace可以 ...

  5. POJ2653判断直线是否相交

    bool judge(node p1,node p2,node p3,node p4){    if(min(p1.x,p2.x)>max(p3.x,p4.x)||min(p1.y,p2.y)& ...

  6. SqlServer 数据库 引擎优化使用(六)

    一:新建模板 二:选择跟踪的语句类型: 使用模板: 把范文的行为进行记录: 开启引擎: 选择文件和数据库: 选择选项: 分析的结果:

  7. 【Mocha.js 101】钩子函数

    前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...

  8. 【JS】IE兼容placeholder

    直接上代码: $(document).ready(function () { var doc = document, textareas = doc.getElementsByTagName('tex ...

  9. OpenMP共享内存并行编程详解

    实验平台:win7, VS2010 1. 介绍 平行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有 ...

  10. 使用 AdaBoost 元算法提高分类器性能

    前言 有人认为 AdaBoost 是最好的监督学习的方式. 某种程度上因为它是元算法,也就是说它会是几种分类器的组合.这就好比对于一个问题能够咨询多个 "专家" 的意见了. 组合的 ...