`
灵动的水
  • 浏览: 191105 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

freemarker四种变量介绍

阅读更多
freemarker的变量可以分为四种,分别是数据模型的变量【root中的变量】,模板中的变量使用【<#assign>定义的变量】,局部变量【在指令中的变量】,循环变量【在循环中的变量】

数据模型的变量【root中的变量】
直接从模型中给模板传值的变量就是数据模型的变量,它把变量的值放在一个map中,在模板中直接可以用。
@Test
public void test10() {
   root.put("username","张三");
   fu.print("10.ftl",root);
}
${username}
张三

模板中的变量使用【<#assign>定义的变量】
模板中的变量,是使用<#assign定义的变量,如果模板中定义的变量和模型中的变量名称一致,不是覆盖,而是隐藏
<#assign username="李四">
<#--此时模板中的变量的名称和模型中的变量名称一致,不是覆盖,而是隐藏-->
${username}
李四
模型中的变量被隐藏后,可以使用.globals可以访问模型中的变量
<#--使用.globals可以访问模型中的变量-->
${.globals.username}
张三

局部变量【在指令中的变量】
使用local可以声明局部变量
<#macro test>
   <#--
   此时当调用该指令之后,会将模板中的变量username覆盖为王五
   所以这种方式存在风险,所以一般不使用这种方式在指令中定义变量
   -->
   <#--<#assign  username="王五"/>-->
   <#--使用local可以声明局部变量,所以在marco中非特殊使用局部变量-->
   <#local  username="王五"/>
   ${username}
</#macro>
<@test/>
${username}
   王五
李四

循环变量【在循环中的变量】
在list循环中定义的变量,循环中的变量只在循环中有效,也是一种临时的变量定义方式
<#list 1..3 as username>
   <#--循环中的变量出了循环就消失-->
   ${username}
</#list>
${username}
   1
   2
   3
李四

本文链接:FreeMarker四种变量的用法,本文由huangyineng原创,转载请注明出处

assign
    assign指令在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层变量,
    assign指令的用法有多种,包含创建或替换一个顶层变量,或者创建或替换多个变量等,
    它的最简单的语法如下:
      <#assign name=value [in namespacehash]>,
      这个用法用于指定一个名为name的变量,该变量的值为value,
      此外,FreeMarker允许在使用assign指令里增加in子句,
      in子句用于将创建的name变量放入namespacehash命名空间中.

    assign指令还有如下用法:
      <#assign name1=value1 name2=value2 ... nameN=valueN [in namespacehash]>,
      这个语法可以同时创建或替换多个顶层变量,此外,还有一种复杂的用法,
      如果需要创建或替换的变量值是一个复杂的表达式,
      则可以使用如下语法格式:
        <#assign name [in namespacehash]>capture this</#assign>,
      在这个语法中,是指将assign指令的内容赋值给name变量.如下例子:
      <#assign x>
      <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]as n>
      ${n}
      </#list>
      </#assign>
      ${x}
      上面的代码将产生如下输出:
                星期一 星期二 星期三 星期四 星期五 星期六 星期天
      虽然assign指定了这种复杂变量值的用法,但是我们也不要滥用这种用法,
        如下例子:
                 <#assign x>Hello ${user}!</#assign>,
        以上代码改为如下写法更合适:
                 <#assign x="Hello ${user}!">

===============================================================

解释:global、assign、local(macro参数)、list(由list创建的循环变量如:<#list a as x>)关系
global 全局变量,在所有命名空间可见
assign 当前命名空间可见
local(macro参数)  局部变量,当前宏内可见

循环变量(<#list a as x>)  当前循环可见
他们之间的关系 循环变量会隐藏局部变量(local创建的或macro参数)
局部变量(local创建的或macro参数)会隐藏assign(创建的变量)
assign(创建的变量)会隐藏global
分享到:
评论

相关推荐

    freemarker替换变量实例

    freemarker替换变量实例

    spring boot 和 freemaker 全局变量

    Spring MVC配置Freemarker全局变量,实现应用全路径

    Freemarker 实例,Freemarker 实例

    Freemarker 实例,Freemarker 实例Freemarker 实例,Freemarker 实例

    freemarker语法完整版.doc

    freemarker语法完整版.doc

    freemarker语法完整版

    Freemarker页面语法 A 概念 最常用的 3 个概念 sequence 序列,对应java 里的list 、数组等非键值对的集合 hash 键值对的集合 namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该ftl 文件的资源 ...

    freemarker总结

    FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,...

    spring+hibernate+freemarker+jQuery 登录注册例子

    spring+hibernate+freemarker+jQuery 登录注册例子

    FreeMarker概述2008

     内建函数的用法类似访问散列的子变量,只是使用“?”替代“.”,下面列出常用的一些函数  字符串使用的:  html:对字符串进行HTML编码  cap_first:使字符串第一个字母大写  lower_case:将字符串转换成...

    Freemarker使用手册、api、中文版教程

    FreeMarker官方参考文档总共有四份,它们分别是  Designer's Guide(网上已有翻译,主要从FreeMarker 的概念上介绍)  Programmer's Guide(本文档所以翻译的部分,主要从框架的设计方面介绍)  XML ...

    超完整FreeMarker中文教程,代码

    什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................

    freemarker 导出word表格

    用word编好格式,另存为xml文件,修改变量,修改成.ftl模版,然后赛数据导出。

    freemark开发指南详解

    PDF格式中文版手册,是学习FreeMarker的必备手册。freemark 开发指南

    spring mvc +freemarker不错的mvc搭配1.1

    spring mvc +freemarker不错的mvc搭配 原文: http://lavafree.iteye.com/blog/1096699 一、原来的程序有问题,导致maven无法编译运行。修改后解决了maven无法编译打包运行的问题,运行通过。 1.pom.xml 增加了必需的...

    freeMark语法

    NULL 博文链接:https://lei-huf.iteye.com/blog/642904

    使用Java-freemarker生成word文档.doc

    先创建一个word文档,按照需求在word中填好一个模板,然后将文档保存为xml文档格式,使用文档编辑器打开这个xml格式的文档(这里直接使用eclipse自带的编辑工具),把对应的数据换成变量${xxx},使用Freemarker读取...

    FreeMarker 2.3.18官方文档中文版(南磊译)(书签版)

    麻烦把这个也删掉

    FreeMark学习笔记

    FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性.下面分别讨论这些情况 1,顶层变量 所谓顶层变量就是直接放在数据...

    freemarker-2.3.22.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    Java学习指南(11) FreeMarker与MVC框架

    〖课程介绍〗这是一篇网站原理课程,先介绍FreeMarker模板引擎的使用,然后以FreeMarker API为基础设计一个MVC框架,以此展开说明MVC框架的流程原理。演示平台:Eclipse EE ,FreeMarker 2.3  〖主要内容〗包含以下...

    FreeMarker 手册

    第四章 其它 ........................................................................................................... 45 4.1 自定义指令 .................................................................

Global site tag (gtag.js) - Google Analytics