zoukankan      html  css  js  c++  java
  • FreeMarker marco指令(3.4)

    marco, nested, return 指令

    语法:

    <#marco name param1 param2 ... paramN>
    
    ...
    
    <#nested loopvar1,loopvar2,...,loopvarN>
    
    ...
    
    <#return>
    
    ...
    
    </#marco>

    说明:

    1. name: 宏变量的名称,它不是表达式。
    2. param1,param2等:局部变量的名称,存储参数的值(不是表达式)
    3. loopvar1,loopvar2等:可选的循环变量的值,是nested指令想为嵌套内容创建的。这些都是表达式。
    4. return 和 nested指令时可选的。 而且可以在<#marco></#marco>之间被用在任意位置和任意次数。
    5. 没有默认值的参数必须在有默认值参数(paramName=defaultValue)之前。

          marco 宏变量存储模板片段(宏定义体),可以被用作自定义指令。这个变量也存储自定义指令的被允许的参数名。当将这个变量作为指令时,必须给所有参数赋值,除了有默认值的参数。默认值当且仅当你调用宏而不给参数赋值时起作用。

    变量会在模板开始时被创建,而不管 marco指令放置在模板的什么位置。

    示例1:有参数的、且有默认值参数

    <#macro test foo bar="Bar" baaz=-1>
    Test text, and the params: ${foo}, ${bar}, ${baaz}
    </#macro>
    
    <@test foo="a" bar="b" baaz=5*5-2/>
    <@test foo="a" bar="b"/>
    <@test foo="a" baaz=5*5-2/>
    <@test foo="a"/>

    输出结果:

    Test text, and the params: a, b, 23
    Test text, and the params: a, b, -1
    Test text, and the params: a, Bar, 23
    Test text, and the params: a, Bar, -1

    示例2:

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

         nested 指令执行自定义指令开始和结束标签中间的模板片段。嵌套的片段可以包含模板中合法的任意内容:插值,指令…等。它在上下文环境中被执行,也就是宏被调用的地方,而不是宏定义体的上下文中。因此,比如,你不能看到嵌套部分的宏的局部变量。

    示例3:

    <#macro do_twice>
    1. <#nested>
    2. <#nested>
    </#macro>
    
    <@do_twice>something</@do_twice>
    
    输出: 
    
    1. something
    2. something

    示例4:(嵌套指令可以对嵌套内容创建循环变量)

    <#macro do_thrice>
    <#nested 1>
    <#nested 2>
    <#nested 30>
    </#macro>
    
    <#-- 在自定义指令的情形下,语法是循环变量的名称在分号之后给定-->
    <@do_thrice ; x> 
    ${x} Anything.
    </@do_thrice>
    
    输出:
    1Anything.
    2 Anything.
    30 Anything.
  • 相关阅读:
    分组声明
    描述项目的典型用户与场景
    用户调研
    10-11-12
    Sprint--5.21
    Cosplay之孩子的妈咪
    作业5.1之5.2
    51nod 1393 1393 0和1相等串
    51nod 1090 3个数和为0(排序+二分)
    51nod 1095 Anigram单词(map的使用)
  • 原文地址:https://www.cnblogs.com/kjitboy/p/5094274.html
Copyright © 2011-2022 走看看