知识点

相关文章

更多

最近更新

更多

FreeMarker四种变量的用法

2019-03-06 08:40|来源: 领悟书生

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原创,转载请注明出处

相关问答

更多
  • 输出、输入、存储、处理
  • 常用的三个是FlowLayout,GridLayout,BorderLayout。
  • 直接赋值就可以了呀 <#assign x=one/> 如果one是数值型,直接可以加减乘除操作,比如 <#assign x=one+1/>
  • 1.首先行动优势 首先行动优势(first-mover advantage)是指,在博弈中首先作出战略选择并采取相应行动的参与人可以获得较多的利益。 2.确实可信的威胁 确实可信的威胁(credible threat)是指,博弈的参与人通过某种行动改变自己的支付函数,从而使得自己的威胁显得可信。参与人为改变博弈结果而采取的措施称为承诺(commitment)。 第四节 不完全信息静态博弈 在许多情况下,参与人对对手的了解往往是不够精确的。这种情况下的博弈就是不完全信息博弈。 举例来说,某一市场原来被A企业所 ...
  • 双叹号的用法是忽略空格。 举例: <#list list!! as newStr >。 解释:此时freemarker会自动忽略掉空变量不会报错,如果没有双叹号的话,freemarker会直接抛出异常的。
  • 在学习计算机知识的过程中,经常要把学习心得记录下来,用字和笔,写文字材料还顺利,但记录大量的窗口、菜单时显出力不从心,窗口中的很简单的操作,用文字来说明,会繁多且让读者如坠云雾中。用电子文档就不同了,对窗口,我们可以用PRINT SCREEN键拷贝到剪贴板,再粘贴到文档中,形成一篇图文并茂的文档,不过,PRINT SCREEN键有不足,不能预览拷贝的图形、不能对拷贝的图形作一些预处理如给图形编号、对图形着重处作标注、录制简单的图形操作界面视频、根据文档的需要定制拷贝图形的图像格式、不能选择拷贝对象如仅是屏幕 ...
  • 现在最常用的进程间通信的方式有:信号,信号量,消息队列,共享内存。 所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指传递一些massege。 他们的使用方法是基本相同的,所以只要掌握了一种的使用方法,然后记住其他的使用方法就可以了。 1. 信号 在我学习的内容中,主要接触了信号来实现同步的机制,据说信号也可以用来做其它的事情,但是我还不知道做什么。 信号和信号量是不同的,他们虽然都可用来实现同步和互斥,但前者是使用信号处理器 ...
  • (1)用一个庞大的程序完成全部工作。程序的各部分可以实现为函数,函数之间通过参数、返回值和全局变量来交换信息。 (2)使用多个程序,程序之间用某种形式的IPC进行通信。许多标准的Unix工具都是按这种风格设计的,它们使用shell管道(IPC的一种形式)在程序之间传递信息。 (3)使用一个包含多个线程的程序,线程之间使用某种IPC。这里仍然使用术语IPC,尽管通信是在线程之间而不是在进程之间进行的。 (4)还可以把后两种设计形式结合起来:用多个进程来实现,其中每个进程包含几个线程。在这种情况下,进程内部的线 ...
  • 通过string.length();得到字符串的长度string.length(); 然后使用substring来识别你需要从string修剪的位置; string.substring(string.length()-4,string.length()); substring方法用法; string.substring(beginning index,end index);` so your beginning index is 326235253235235 ...