`

freemarker之模板开发(其它之在模板中定义变量)

 
阅读更多

freemarker之模板开发(其它之在模板中定义变量)

----------

模板可以使用在数据模型中定义的变量。在数据模型之外,模板本身也可以定义变量来使用这些临时变量可以适应FTL指令来创建和替换。要注意每一次模板执行时都维护它自己的这些变量的私有设置,这些变量是在页面用以呈现信息的。变量的初始值是空,当模板执行结束这些变量便被销毁了。

你可以访问一个在模板里定义的变量,就像是访问数据模型根上的变量一样这个变量比定义在数据模型中的同名参数有更高的优先级。那就是说,如果你恰巧定义了一个名为"foo"的变量,而在数据模型中也有一个名为"foo"的变量,那么模板中的变量就会将数据模型根上的变量隐藏(而不是覆盖!)

在模板中可以定义三种类型的变量:

1.简单变量:它能从模板中的任何位置来访问,或者从使用include指令引入的模板访问。可以使用assignmacro指令来创建或替换这些变量。

2.局部变量:它们只能被设置在宏定义体内,而且只在宏内可见。一个局部变量的生存周期只是宏的调用过程。可以使用local指令在宏定义体内创建或替换局部变量。

3.循环变量:循环变量是由指令(如:list)自动创建的,而且它们只在指令的开始和结束标记内有效。宏的参数是局部变量而不是循环变量。

示例,使用assign创建和替换变量

<#assign x=1> <#-- 创建变量x -->
${x}
<#assign x = x+3> <#-- 替换变量x -->
${x}

注意:局部变量也会隐藏(不是覆盖)同名的简单变量。循环变量也会隐藏(不是覆盖)同名的局部变量和简单变量。

 

例: 

<#assign x="plain">
${x}	<#-- 这里是普通变量 -->
<#list ['loop'] as x>
	${x}	<#-- 现在循环变量隐藏了普通变量 -->
	<#assign x = "plain2">	<#--替换普通变量,隐藏在这里不起作用 -->
	${x}	<#--它仍然隐藏普通变量 -->
</#list>
${x}		<#-- 普通变量的新值 -->
<#macro test>
	${x}	<#-- 这里我们仍然看到的是普通变量 -->
	<#local x = "local">
	${x}	<#-- 现在局部变量隐藏了它 -->
	<#list ["loop"] as x>
		${x}	<#-- 现在循环变量隐藏了局部变量 -->
	</#list>
	${x}	<#-- 现在又可以看到局部变量了 -->
</#macro>

 

注意:内部循环变量可以隐藏外部循环变量。

如例:

<#list["loop 1"] as x>
	${x}
	<#list ["loop 2"] as x>
		${x}
		<#list ["loop 3"] as x>
			${x}
		</#list>
	</#list>
</#list>

 

有时会发生一个变量隐藏数据模型中的同名变量,但是如果想访问数据模型中的变量,就可以使用特殊变量globals。如例,假设我们在数据模型中有一个名为user,值为"Big Joe"的变量。

<#assign user = "Joe Hider">
${user}		<#-- 打印:Joe Hider -->
${.globals.user}	<#-- 打印:Big Joe -->

 

分享到:
评论

相关推荐

    freemarker语法完整版

    假设mylib.ftl 里定义了宏copyright 那么我们在其他模板页面里可以这样使用 Freemarker代码 &lt;#import "/libs/mylib.ftl" as my&gt; &lt;@my.copyright date="1999-2002"/&gt; 在freemarker里被称作namespace --&gt;...

    FreeMarker模板引擎-其他

    FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示 你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术...

    freemarker总结

    该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...

    超完整FreeMarker中文教程,代码

    4.2 在模板中定义变量 ..................................................................................... 51 4.3 命名空间 ................................................................................

    FreeMarker设计指南

    输出 (2)数据模型 (3)模板 2、数据模型 (1)基础 (2)Scalar变量 (3)hashes 、sequences和集合 (4)方法 (5... (1)用户定义指令 (2)在模板中定义变量 (3)名字空间

    FreeMarker中文指导手册

    4.2 在模板中定义变量 ..................................................................................... 50 4.3 命名空间 ................................................................................

    Beetl模板引擎-其他

    独特功能:Beetl有些功能是发展了10多年的模板引擎所不具备的,这些功能非常利于模板的开发和维护,如下:1、自定义占位符和控制语句起始符号,这有利于减小模板语法对模板的倾入性,比如在html模板中,如果定义控制...

    FreeMark学习笔记

    表达式是FreeMarker模板的核心功能,表达式放置在插值语法${}之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker 标签结合,用于控制输出.实际上FreeMarker的表达式功能非常强大,它不仅支持直接指定值,输出...

    FreeMarker 手册

    4.2 在模板中定义变量 ..................................................................................... 50 4.3 命名空间 ................................................................................

    spring in action英文版

     3.3.1 在Spring中定义切入点  3.3.2 理解Advisor  3.3.3 使用Spring的静态切入点  3.3.4 使用动态切入点  3.3.5 切入点实施  3.4 创建引入  3.4.1 实现IntroductionInterceptor  3.4.2 创建...

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 ...B.3.4 使用Gienah Testing在JUnit 4中进行测试 B.4 小结

    Spring in Action(第二版 中文高清版).part1

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 ...B.3.4 使用Gienah Testing在JUnit 4中进行测试 B.4 小结

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.3.3企业级应用中的依赖注入 ...2.3.2使用其他的bean ...b.3.4使用gienahtesting在junit4中进行测试 b.4小结

    Spring 2.0 开发参考手册

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack Thierry Templier Erwin ...

    单点登录源码

    服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。示例图: ![API网关]...

Global site tag (gtag.js) - Google Analytics