• freemarker 模板中定义变量


    在模板中能够定义三种类型的变量:

    • 简单变量:它能从模板中的不论什么位置来訪问,或者从使用 include 指令引入的模板訪问。

      能够使用 assign 或 macro 指令来创建或替换这些变量。

    • 局部变量:它们仅仅能被设置在宏定义体内,并且仅仅在宏内可见。一个局部变量的生存周期仅仅是宏的调用过程。能够使用 local 指令在宏定义体内创建或替换局部变量。
    • 循环变量:循环变量是由指令(如 list )自己主动创建的,并且它们仅仅在指令的開始和结束标记内有效。宏的參数是局部变量而不是循环变量。



    演示样例:使用 assign 创建和替换变量
    <#assign x = 1> <#-- 创建变量 x -->
    ${x}
    <#assign x = x + 3> <#-- 替换变量 x -->
    ${x}
    1
    4

    局部变量也会隐藏(不是覆盖)同名的简单变量。循环变量也会隐藏(不是覆盖)同名的局部变量和简单变量。比如:
    <#assign x = "plain">
    1. ${x} <#-- 这里是普通变量 -->
    <@test/>
    6. ${x} <#-- 普通变量的值没有被改变 -->
    <#list ["loop"] as x>
      7. ${x} <#-- 如今循环变量隐藏了普通变量 -->
      <#assign x = "plain2"> <#-- 替换普通变量, 隐藏在这里不起作用-->
      8. ${x} <#-- 它仍然隐藏普通变量 -->
    </#list>
    9. ${x} <#-- 普通变量的新值 -->
    
    
    <#macro test>
      2. ${x} <#-- 这里我们仍然看到的是普通变量 -->
      <#local x = "local">
      3. ${x} <#-- 如今局部变量隐藏了它 -->
      <#list ["loop"] as x>
        4. ${x} <#-- 如今循环变量隐藏了局部变量 -->
      </#list>
      5. ${x} <#-- 如今又能够看到局部变量了 -->
    </#macro>
    1. plain
     2. plain
     3. local
      4. loop
     5. local
    6. plain
     7. loop
     8. loop
    9. plain2
    注意到循环变量的设置是通过指令调用时创建的(本例中的 <list ...> 标签)。

    没有其它的方式去改变循环变量的值(也就是说你不能使用定义指令来改变它的值。

    )。

    从上面的演示样例来看,虽然也能够使用一个循环变量来隐藏另外一个。

    有时会发生一个变量隐藏数据模型中的同名变量,可是如果想訪问数据模型中的变量,就能够使用特殊变量 globals 。比如,如果我们在数据模型中有一个名为 user ,值为”BigJoe”的变量。

    <#assign user = "Joe Hider">
    ${user}
    <#-- 打印: Joe Hider -->
    ${.globals.user} <#-- 打印: Big Joe -->



  • 相关阅读:
    Netty源码分析-ChannelPipeline事件传播
    Netty源码分析-NioEventLoop事件轮询
    Netty源码分析-ServerBootstrap启动过程
    Canal基本原理
    [Android]proguard重新编译和如何不混淆第三方jar包
    [Android]listview recycleview的复用问题
    [Android] android .keystore文件转x509pem工具
    [Android] android studio 2.0即时运行功能探秘
    大神都是有个起点的
    Python列表的用法和基本操作
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5103384.html
Copyright © 2020-2023  润新知