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. Http服务端

    第一,使用node提供的http模块 var http=require('http'); 第二,创建一个服务器实例 通过http的createServer()方法. var server=http.c ...

  2. Matlab并行编程方法1

    相信很多朋友在利用matlab进行计算时,会遇到循环次数过大,或者是单次计算量过大的问题,比如需要计算的数值阵列数据量过大,利用传统的编程方式,跑一次程序几个小时,都要等的急死了是不是呢?如果遇到这种 ...

  3. springmvc下的省市县三级联动

    转自:https://blog.csdn.net/rentian1/article/details/77662635

  4. hadoop 常用端口 及模块介绍

    50070                 namenode http port 50075                 datanode   http  port 50090          ...

  5. DAY11-MYSQL索引原理与慢查询优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  6. ListView显示Sqlite的数据

    在安卓中,ListView和Sqlite都是十分常用的.这次我们来结合这个两个知识点写一个Demo. 功能:吧SQLite中的数据用ListView显示出来. 先看截图吧 首先是数据库 然后是运行截图 ...

  7. SNNU女装T台走秀(状压dp)

    呜啦啦啦啦啦啦~~!!SNNU首届女装T走秀大赛开始了! 本次比赛共有N名队员希望参加比赛:ddjing希望这次比赛尽可能的吸睛,因此他决定对N名队员进行一次海选: 多亏ddjing有一双发现美的眼睛 ...

  8. git 本地代码到github(转)

    git 本地代码到github   一·什么是gitHub? 官网解释:gitHub是一个让无论处于何地的代码工作者能工作于同一个项目,同一个版本的平台.(GitHub is a code hosti ...

  9. 窗体控件JFrame的使用

    ---------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:MyFrame.java 工程结构目录如下: 在 Source 界面和 Des ...

  10. 算法Sedgewick第四版-第1章基础-018一解决不能声明泛型数组的两咱方法(强转或反射)

    1. /****************************************************************************** * Compilation: ja ...