1 assign 指令

使用这个指令你可以创建一个新的变量,或者替换一个已经存在的变量。注意仅仅顶级变量可以被创建/替换(也就是说你不能创建/替换some_hash.subvar,除了some_hash)。
关于变量的更多内

<#assign
seasons = ["winter", "spring", "summer", "autumn"]
test = test +
>

如果你知道什么是命名空间:assign指令在命名空间中创建变量。通常它在当前的命名空间(也就是和标签所在模板关联的命名空间)中创建变量。但如果你是用了in namespacehash,那么你可以用另外一个命名空间来创建/替换变量。比如,这里你在命名空间中/mylib.ftl创建/替换了变量bgColor。

<#import "/mylib.ftl" as my>
<#assign bgColor="red" in my>

assign的极端使用是当它捕捉它的开始标记和结束标记中间生成的输出时。也就是说,在标记之间打印的东西将不会在页面上显示,但是会存储在变量中。比如:

<#macro myMacro>foo</#macro>
<#assign x>
<#list .. as n>
${n} <@myMacro />
</#list>
</#assign>
Number of words: ${x?word_list?size}
${x}

输出结果为:

Number of words:
foo
foo
foo

请注意你不应该使用它来往字符串中插入变量:

<#assign x>Hello ${user}!</#assign> <#-- BAD PRACTICE! -->

上面是一种错误的写法

<#assign x="Hello ${user}!">

这种写法才是正确的

2 global 指令

这个指令和assign相似,但是被创建的变量在所有的命名空间中都可见,但又不会存在于任何一个命名空间之中。精确地说,正如你会创建(或替换)一个数据模型变量。因此,这个变量是全局的。如果在数据模型中,一个相同名称的变量存在的话,它会被使用这个指令创建的变量隐藏。如果在当前的命名空间中,一个相同名称的变量存在的话,那么会隐藏由global指令创建的变量。
比如<#global x = 1>,用创建了一个变量,那么在所有命名空间中x都可见,除非另外一个称为x的变量隐藏了它(比如你已经用<#assign x = 2>创建了一个变量)。这种情形下,你可以使用特殊变量globals,比如${.globals.x}。注意使用globals你看到所有全局可访问的变量;不但由global指令创建的变量,而且是数据模型中的变量。
自定义JSP标记的用户请注意:用这个指令创建的变量集合和JSP页面范围对应。这就意味着,如果自定义JSP标记想获得一个页面范围的属性(page-scope bean),在当前命名空间中一个相同名称的变量,从JSP标记的观点出发,将不会隐藏。

<#global name=value>
or
<#global name1=value1 name2=value2 ... nameN=valueN>
or
<#global name>
capture this
</#global>
这里: name:变量的名称。它不是表达式。但它可以被写作是字符串形式,如果变量名包含保留字符这是很有用的,比如<#global "foo-bar" = >。注意这个字符串没有扩展插值(如"${foo}")。
value:存储的值,是表达式。

3 t,lt,rt 指令

这些指令,指示FreeMarker去忽略标记中行的特定的空白
   t(整体削减):忽略本行中首和尾的所有空白。
   lt(左侧削减):忽略本行中首部所有的空白。
   rt(右侧削减):忽略本行中尾部所有的空白。
这里:
  “首部空白”表示本行所有空格和制表符(和其他根据UNICODE中的空白字符,除了换行符)在第一个非空白字符之前。
  “尾部空白”表示本行所有的空格和制表符(和其他根据UNICODE中的空白字符,除了换行符)在最后一个非空白字符之后,还有行末尾的换行符。
理解这些检查模板本身的指令是很重要的,而不是当你合并数据模型时,模板生成的输出。(也就是说,空白的移除发生在解析阶段)
比如这个

--
<#t>
<#t>
<#lt> <#rt>

输出结果为:

--

--

freemarker常用标签解释二的更多相关文章

  1. freemarker常用标签解释

    标签一: if else 你可以使用if,elseif和else指令来条件判断是否越过模板的一个部分.这些condition-s必须计算成布尔值,否则错误将会中止模板处理.elseif-s和else- ...

  2. freemarker常用标签解释遍历

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  3. freemarker常用标签解释三

    1 date,time,datetime 日期,时间,时间日期 <#assign test1 = "10/25/1995"?date("MM/dd/yyyy&quo ...

  4. freemarker自定义标签(二十一)

    一,讲解一 1.自定义标签说明 宏变量存储模板片段可以被用作自定义指令macro 2.示例说明 <html> <head> <meta http-equiv=" ...

  5. freemarker自定义标签(二)

    freemarker自定义标签 1.自定义标签 通过自定义标签,写一个重复指定字符串 2.实现源码 <html> <head> <meta http-equiv=&quo ...

  6. 一、HTML概述 二、web相关的概念 三、HTML的常用标签

    一.HTML概述###<1>概念 HTML:Hypertext Markup Language,超文本 标记语言,用来描述网页的一种语言. 非编程语言,由浏览器直接解释运行. ###< ...

  7. 咸鱼入门到放弃7--jsp<二>jsp常用标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  8. freemarker自定义标签报错(二)

    freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Unexpected end of file reached. at freemarker ...

  9. OneBlog开源博客-详细介绍如何实现freemarker自定义标签

    前言 OneBlog中使用到了springboot + freemarker的技术,同时项目里多个controller中都需要查询一个公有的数据集合,一般做法是直接在每个controller的方法中通 ...

随机推荐

  1. apache将不带www域名301重定向到带www的域名的配置方法

    #强制重定向到wwwRewriteEngine OnRewriteCond %{HTTP_HOST} ^jb51.net/ [NC]RewriteRule ^(.*)$ http://www.jb51 ...

  2. NodeJS之Url的使用

    一.通过http模块中的request事件可以得到在服务端拿到客户端的有关url的数据(req.url),其中req.url得到的数据是端口号后的所有路径,之后通过调入url模块对获取到的req.ur ...

  3. java 多线程系列基础篇(五)之线程等待与唤醒

    1.wait(), notify(), notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口.wait()的作用是让当前线 ...

  4. Linux之Ubuntu环境配置(一)

    Linux下的搜狗输入法安装: 1.搜狗官网下载Linux64bit版本文件,默认在/home/username/Downloads目录下. 2.cd /home/username/Downloads ...

  5. hibernate的子查询

    hibernate原话 HQL supports subqueries in the where clause. We can't think of many good uses for subque ...

  6. [bzoj2460] [BeiJing2011]元素(线性基+贪心)

    题目大意: 有一些矿石,每个矿石有一个a和一个b值,要求选出一些矿石,b的和最大且不存在某个矿石子集它们的a的异或和为0. 解题关键:对魔力进行由大到小排序,依次加入线性基,统计即可. #includ ...

  7. JavaScipt——Windows.document对象

    四中选择器:class ,id , name , 标签 通过选择器获取对象: document.getElementById('');  -- id选择器 ...................... ...

  8. Selenium二次封装-Java版本

    package com.yanfuchang.selenium.utils; import java.awt.AWTException; import java.awt.Robot; import j ...

  9. python pip ez_setup.py

    #!/usr/bin/env python """Bootstrap setuptools installation To use setuptools in your ...

  10. Linux 大页面使用与实现简介(转)

    引言 随着计算需求规模的不断增大,应用程序对内存的需求也越来越大.为了实现虚拟内存管理机制,操作系统对内存实行分页管理.自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB ...