概要

<#global name=value><#global name1=value1 name2=value2 ... nameN=valueN><#global name>
  capture this
</#global>

这里:

  • name:变量的名称。 它不是表达式。但它可以被写作是字符串形式,如果变量名包含保留字符这是很有用的, 比如 <#global "foo-bar" = 1>。 注意这个字符串没有扩展插值(如 "${foo}")。
  • =:赋值操作符,也可以简写的赋值操作符之一 (+++=,等...),和 assign 指令 相似
  • value:存储的值,是表达式。

描述

该指令和 assign 相似, 但是被创建的变量在所有的 命名空间 中都可见, 但又不会存在于任何一个命名空间之中。精确地说,正如你会创建 (或替换)一个数据模型变量。因此,这个变量是全局的。如果在数据模型中, 一个相同名称的变量存在的话,它会被使用该指令创建的变量隐藏。 如果在当前的命名空间中,一个相同名称的变量存在的话, 那么会隐藏由 global 指令创建的变量。

例如,用 <#global x = 1> 创建一个变量, 那么在所有命名空间中 x 都可见, 除非另外一个称为 x 的变量隐藏了它 (比如你已经用 <#assign x = 2> 创建了一个变量)。 这种情形下,你可以使用 特殊变量 globals,比如 ${.globals.x}。请注意, 使用 globals 你看到所有全局可访问的变量; 不但由 global 指令创建的变量,而且是数据模型中的变量。

自定义JSP标记的用户请注意:用这个指令创建的变量集合和JSP页面范围对应。 这就意味着,如果自定义JSP标记想获得一个页面范围的属性(page-scope bean), 在当前命名空间中一个相同名称的变量,从JSP标记的观点出发,将不会隐藏。