zoukankan      html  css  js  c++  java
  • macro , nested , return指令

    macro可以用于实现自定义指令,通过使用自定义指令,可以将一段模板片段定义成一个用户指令,使用macro指令的语法格式如下:
    < #macro name param1 param2 ... paramN>
    ...
    < #nested loopvar1, loopvar2, ..., loopvarN>
    ...
    < #return>
    ...
    < /#macro>
    在上面的格式片段中,包含了如下几个部分:
    name:name属性指定的是该自定义指令的名字,使用自定义指令时可以传入多个参数
    paramX:该属性就是指定使用自定义指令时报参数,使用该自定义指令时,必须为这些参数传入值
    nested指令:nested标签输出使用自定义指令时的中间部分
    nested指令中的循环变量:这此循环变量将由macro定义部分指定,传给使用标签的模板
    return指令:该指令可用于随时结束该自定义指令.

    看如下的例子:
    < #macro book>   //定义一个自定义指令
    j2ee
    < /#macro>
    < @book />    //使用刚才定义的指令
    上面的代码输出结果为:j2ee

    在上面的代码中,可能很难看出自定义标签的用处,因为我们定义的book指令所包含的内容非常简单,实际上,自定义标签可包含非常多的内容,从而可以实现更好的代码复用.此外,还可以在定义自定义指令时,为自定义指令指定参数,看如下代码:
    < #macro book booklist>     //定义一个自定义指令booklist是参数
    <#list booklist as book>
       ${book}
    < /#list>
    < /#macro>
    < @book booklist=["spring","j2ee"] />   //使用刚刚定义的指令
    上面的代码为book指令传入了一个参数值,上面的代码的输出结果为:spring j2ee

    不仅如此,还可以在自定义指令时使用nested指令来输出自定义指令的中间部分,看如下例子:
    < #macro page title>
    < html>
    < head>
       <title>FreeMarker示例页面 - ${title?html}</title>
    < /head>
    < body>
       <h1>${title?html}</h1>
       <#nested>      //用于引入用户自定义指令的标签体
    </body>
    < /html>
    < /#macro>
    上面的代码将一个HTML页面模板定义成一个page指令,则可以在其他页面中如此page指令:
    < #import "/common.ftl" as com>     //假设上面的模板页面名为common.ftl,导入页面
    <@com.page title="book list">
    < u1>
    < li>spring</li>
    < li>j2ee</li>
    < /ul>
    < /@com.page>

    从上面的例子可以看出,使用macro和nested指令可以非常容易地实现页面装饰效果,此外,还可以在使用nested指令时,指定一个或多个循环变量,看如下代码:
    < #macro book>
    < #nested 1>      //使用book指令时指定了一个循环变量值
    <#nested 2>
    < /#macro>
    < @book ;x> ${x} .图书</@book>
    当使用nested指令传入变量值时,在使用该自定义指令时,就需要使用一个占位符(如book指令后的;x).上面的代码输出文本如下:
    1 .图书    2 .图书

    return指令用于结束macro指令,一旦在macro指令中执行了return指令,则FreeMarker不会继续处理macro指令里的内容,看如下代码:
    < #macro book>
    spring
    < #return>
    j2ee
    < /#macro>
    < @book />
    上面的代码输出:spring,而j2ee位于return指令之后,不会输出.

  • 相关阅读:
    pandas 修改列顺序
    read_csv,to_csv 前n行
    郭盛华:未来黑客攻击的将远不止网络
    微软的 Linux 存储库停机 18 多个小时
    警惕黑客利用 Google Docs进行网络钓鱼
    苹果发布紧急补丁!修复被黑客利用的2个零日漏洞
    谷歌发布新框架以防止软件供应链攻击
    郭盛华:以知识见识锤炼真本领,年轻人要有理想
    通过 GDPR 加强密码政策,是企业网络的第一道防线
    肉类供应商遭黑客攻击,并支付了 1100 万美元的赎金
  • 原文地址:https://www.cnblogs.com/zifashaonian10000/p/4218617.html
Copyright © 2011-2022 走看看