`
灵动的水
  • 浏览: 194503 次
  • 性别: 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替换变量实例

    freemarker 介绍

    - `${var}`用于输出变量的值,Freemarker会计算表达式并替换为结果。 4. **模板结构和语法规则**: - Freemarker模板由文本、插值(Interpolation)、FTL标记和注释组成。 - 插值由`${...}`或`#{...}`包围,计算...

    Freemarker 实例,Freemarker 实例

    下面将详细介绍Freemarker的核心概念、配置、语法以及常见使用场景。 **1. Freemarker核心概念** - **模板(Templates)**:Freemarker的核心是模板文件,它定义了页面的布局和样式,包含变量和控制结构。 - **数据...

    spring boot 和 freemaker 全局变量

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

    freemarker语法完整版.doc

    在Freemarker中,存在五种基本概念:Scalars、Hashes、Sequences、Collection Variables和Methods。 1. Scalars:Scalars是最基本的数据类型,用于存储单值字符串、数字、日期和布尔值。字符串可以由单引号或双引号...

    freemarker 自定义freeMarker标签

    FreeMarker使用${...}表达式来插入变量,#{...}用于输出注释,以及、等控制结构进行条件判断和循环。然而,这些默认标签可能无法满足所有复杂的场景,因此自定义标签就显得尤为必要。 自定义FreeMarker标签通常涉及...

    eclipse的freemarker插件

    而Freemarker则是一种轻量级的、基于模板的Java模板引擎,常用于Web应用中的动态内容生成,比如JSP替代技术。它允许开发者将业务逻辑与页面展示分离,提高代码的可维护性和可读性。 "eclipse的freemarker插件"是指...

    freemarker Demo 适用于freemarker初学

    Freemarker提供了一个调试模式,可以帮助开发者找出模板中的错误,比如未定义的变量、语法错误等。 这个"freemarker Demo"项目应该包含了基本的模板文件、Struts2配置以及相关的Java代码,通过实际运行和修改这些...

    freemarker

    此外,`test`包下的测试类展示了一种使用Freemarker的方式,通过构建数据模型并将其传递给模板,实现了动态内容的生成。 综上所述,Freemarker是一种强大的模板引擎,它能够高效地处理复杂的数据结构,并生成各种...

    freemarker-2.3.23jar

    Freemarker的核心概念是模板语言,它是一种声明式的编程方式,允许开发者编写不包含任何控制逻辑的文本模板。在模板中,开发者可以使用特定的语法(如`&lt;#if&gt;`、`&lt;#foreach&gt;`等)来控制输出,并通过变量将数据绑定到...

    FreeMarker手册-Freemarker 2.3.18

    FreeMarker的模板语言是一种声明式的编程方式,它允许开发者通过简单的标记语法来控制输出。这些标记不包含执行逻辑,而是与数据模型结合以生成最终输出。例如,`&lt;#if&gt;`、`&lt;#foreach&gt;`用于条件判断和循环,`...

    FreeMarker2.3.23官方中文文档

    这些变量和指令是用特定的FreeMarker语法表示的,例如`${expression}`用于输出变量值,`&lt;#if&gt;`、`&lt;#foreach&gt;`等用于控制流程。 1. **变量和表达式**:在FreeMarker模板中,`${}`内的内容是表达式,用于获取Java对象...

    FreeMarker相关学习文档

    四、FreeMarker在Web开发中的应用 1. JSP替代:FreeMarker可以替代JSP,减少视图层的Java代码,提高可读性和可维护性。 2. 邮件模板:生成动态邮件内容,提高邮件定制化能力。 3. 文档生成:自动生成报告、合同等...

    FreeMarker

    FreeMarker的核心概念是模板文件,这是一种特殊的文本文件,其中包含可替换的占位符(称为变量或指令)。当模板与数据模型合并时,这些占位符会被相应的数据值替换,生成最终的输出。FreeMarker支持多种内置指令和...

    FreeMarker实例教程,手把手教你FreeMarker的方方面面

    - **替换(方括号)语法**:介绍了一种特殊的语法——方括号语法,可用于在模板中进行字符串替换。 #### 5. 程序开发指南 - **创建配置实例**:指导如何设置FreeMarker的运行环境。 - **创建数据模型**:解释如何...

    freemarker\Freemarker教程_中文版

    - **Bean包裹**:Freemarker提供了一种称为“Bean包裹”的机制,用于处理Java Bean对象,使其更易于在模版中使用。 通过以上知识点的深入理解和实践,开发者可以有效地利用Freemarker来构建高效、可维护的Web应用...

    freemarker基本语法整理

    Freemarker 提供了两种逻辑判断语法:if-else 形式和 switch 形式。if-else 形式的语法如下: ```html ... ... ... ``` switch 形式的语法如下: ```html ... ... ... ``` 循环遍历 ...

    freemarker 教程 使用手册

    1. 模板语言:Freemarker是一种声明式语言,它不包含任何控制结构(如循环、条件语句),而是通过特定的语法来表达数据与模板的结合方式。 2. 变量与数据模型:在Freemarker中,变量是由`${}`包裹的,它们从Java...

Global site tag (gtag.js) - Google Analytics