调用方法:

①<@user_def_dir_exp param1=val1 param2=val2 ... paramN=valN/> (xml风格)
②<@user_def_dir_exp param1=val1 param2=val2 ... paramN=valN ;lv1, lv2, ..., lvN/>  (包含循环变量)
③<@user_def_dir_exp ...>...</@user_def_dir_exp>(使用结束标签1)
④<@user_def_dir_exp ...>...</@>(使用结束标签2)

说明:

  1. user_def_dir_exp:表达式算作是自定义指令(比如宏),将会被调用。
  2. param1,param2 等:参数的名称,它们不是表达式。
  3. val1,val2 等:参数的值,它们是表达式。
  4. lv1,lv2 等:循环变量的名称,它们不是表达式。

参数的数量可以是 0(也就是没有参数)。参数的顺序并不重要(除非你使用了位置参数传递)。参数名称必须唯一。在参数名中小写和大写的字母被认为是不同的字母(也就是 Color 和 color 是不同的)。
调用有参数的宏:

<@list items=["mouse", "elephant", "python"] title="Animals"/>
...
<#macro list title items>
<p>${title?cap_first}:
<ul>
<#list items as x>
<li>${x?cap_first}
</#list>
</ul>
</#macro>

结束标签:

你可以在结束标签中忽略 user_def_dir_exp 。也就是说,你可以写 </@> 来替代</@anything> 。这个规则当表达式 user_def_dir_exp 太复杂时非常有用,因为你不需要在结束标签中重复表达式。

位置参数传递:

位置参数传递(如 <@heading "Preface", 1/> )是正常命名参数传递(如<@heading title="Preface" level=1/> )的速记形式,这里忽略了参数的名称。如果自定义指令只有一个参数,或者对于经常使用的自定义指令它参数的顺序很好记忆,速记形式应该被应用。如果你使用参数名称,那顺序就不重要了。

循环变量:

自定义指令创建循环变量(和 list 指令相似)。当你调用指令(如 <#list foos as foo>...</#list> 中的 foo )时循环变量的名称就给定了,而变量的值是由指令本身设置的。在自定义指令的情形下,语法是循环变量的名称在分号之后给定。

<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#list>
</#macro><@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeate><@repeat count=4 ; x, last>
${x}. Something... <#if last> This was the last!</#if>

注意由自定义指令创建的循环变量数量和分号之后指定的循环变量数量需要不匹配。也就是说,如果你对重复是否是最后一个不感兴趣,你可以简单来写:

<@repate count=4 ; x>
${x}. Something...
</@repate >

或者
<@repeat count=4>
Something...
</@repeat >

转载于:https://www.cnblogs.com/kjitboy/p/5094341.html

FreeMarker 用户自定义指令@(3.4)相关推荐

  1. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  2. freemarker基本指令用法

    freemarker基本指令用法 1.if指令 //第一种用法 [#if 条件] ... [/#if] //第二种用法[#if 条件]...[#else]... [/#if]//第三种用法[#if 条 ...

  3. freemarker自定义指令及方法

    "一节复一节,千枝攒万叶"竹子每生长一段就会总结一下打个节,今天我也总结一下最近处理的一个小问题,希望我的小节,对各位看官有所帮助. 背景描述: 最近项目做了一个月报功能,由于生产 ...

  4. Freemarker If指令

    if 指令即判断指令,是常用的FTL指令,freemarker在解析时遇到if会进行判断,条件为真则输出if中间的内容,否则跳过内容不再输出. 模板: <!DOCTYPE html> &l ...

  5. freemarker -自定义指令

    自定义指令可以使用,Marco指令来进行定义 宏 是有一个变量名的模板片段,在模板中使用宏作为自定义指令,这样就能供其他页面使用. <#macro greet><font size= ...

  6. freemarker,自定义指令

    一,自定义指令 <#-- 自定义指令 --> <#macro mycommand1>我的第一个自定义指令 </#macro> <#-- 调用自定义带参数的指令 ...

  7. Freemarker 简介 及手册

    FreeMarker 手册 什么是FreeMarker? FreeMarker是一款模板引擎:即一种基于模板.用来生成输出文本(任何来自于HTML格式的文本用来自动生成源代码)的通用工具.它是为Jav ...

  8. freemarker指令(九)

    Freemarker指令 如果你没有在这里发现模板中的指令,可能你需要在废弃的 FTL 结构中来查找它了. 2.1 if ,else ,elseif  指令 2.1.1  概要 <#if con ...

  9. FreeMarker中文帮助手册API文档,基础入门学习文档

    FreeMarker中文帮助手册API文档,基础入门学习文档 分类: 编程技术 发布: bywei 浏览: 7 日期: 2011年5月28日 分享到: QQ空间 新浪微博 腾讯微博 人人网 什么是Fr ...

最新文章

  1. js类数组转数组的方法(ArrayLike)
  2. Python时间库—datetime的详解及使用
  3. 2016-2017 Central Europe Regional Contest Hangar Hurdles 克鲁斯卡尔重构树 + 建图
  4. 【堆】【DP】Niyaz and Small Degrees(luogu 7600[APIO 2021 T3]/luogu-CF1119F)
  5. mybatis mysql 调用存储过程 多个返回值_图解MyBatis的SQL执行流程(干货)
  6. MSSQL 如何采用sql语句 获取建表字段说明、字段备注、字段类型、字段长度
  7. 神经网络造“汉字”新技能全开,biangbiang面自愧不如
  8. python函数定义及调用-python 中函数的定义以及调用先后顺序问题
  9. js table 生成序号_CSS Counter 以及 CSS content 内容生成技术的实用价值
  10. Intel i5-7200U (3100MHZ),1*8GB(DDR3 1600) 在 Aida64 V5.97.4600 的测试结果
  11. 这个“忽悠”马云10亿的男人,还了阿里5000亿,今天当选为院士!
  12. 怎么生成一个永久性的二维码?微信群二维码如何长期有效?
  13. 开发一个App要100万? 太扯淡
  14. sleuth zipkin reporter-sender 分析
  15. 热门股权转让项目:临沂泰森置业发展有限公司70%股权转让
  16. 狂神说---MySQL笔记
  17. python手机编程软件-手机上Python编程的软件分享
  18. xshell6、Xshell7最新版使用
  19. 1. 批处理常用符号详解:
  20. 李笑来《韭菜的自我修养》笔记

热门文章

  1. C# ref与out关键字解析
  2. Struts拦截器使用
  3. 《设计模式系列》---工厂方法
  4. 关于linux LVM
  5. Dynamics AX 2009 启动时提示“…the application files in exclusive mode”的解决
  6. android dip转px
  7. 【-】WebKit Layout (布局)
  8. Android---手动创建线程与GUI线程同步(一)
  9. OpenCV3.0或OpenCV3.1的SVM操作
  10. 浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除