按关键词阅读: 使用 Macro FreeMarker
10、变换器或其它变量 的集合(通常称库) , 必须使用多名字空间 , 其 目的是防止同名冲突 创建库 下面是一个创建库的例子(假设保存在 lib/my_test. ftl 中): Copyright (C) $date Julia Smith. All rights reserved. Email: $ mail 使用import指令导入库到模板中 , Freemarker 会为导入的库创建新的名字空间 , 并可以通过 import指令中指定的散列变量访问库中的变量: my copyrightdate=1999-2002”/$my. mail$mail 输出结果:Copyright (C) 1999-2002 J 。
11、ulia Smith. All rightsreserved.Email:jsmithacme. comj smithacme. comfredac me. com可以看到例子中使用的两个同名变量并没有冲 突 , 因为它们位于不同的名字空间 。
还可以使用 assign指令在导入的名字空间中创建或替代变 量 , 下面是一个例子:import /lib/my_test. ftl as my$my. mail$my. mail) 输出结果: jsmithacme. comjsmithother. com 数据模型中的变量任何地方都可见 , 也包括不同 的名字空间 , 下面是修改的库: Copyright (C)$ d 。
12、ate$user,Allrightsreserved. #assign mail$useracme, com”假设数据模型中的user变量的值是Fred,则下面的代码: $my. mail输出结果: Copyright (C) 1999-2002 Fred. All rights reserved. Fredacme. com选择 Velocity 还是 FreeMarker?Velocity是另外一个优秀的模板引擎,它是FreeMarker的有力竞争者 。
但是它的模板语言不 够强大 , 也不够严谨 。
除开FreeMarker内建的Velocity所没有的强大 函数外 , FreeMarker还在以下方面 。
【FreeMarker|FreeMarker-macro(宏)的使用】13、更胜一筹: 与Velocity相比 , FreeMarker对表现逻辑和业 务逻辑的划分更为严格 , Freemarker在模板中不 允许对Servlet API进行直接操作(而Velocity 可以) , 如 FreeMarker 中禁止对HttpServletRequest对象直接访问(但可以访 问 HttpServletRequest 对象中的 Attribute)o 通过更加严格的隔离机制 , 牵涉逻辑处理的操作 被强制转移到逻辑层 。
从而完全保证了层次之间 的清晰性 。
另外一个Velocity无法实现的特性 , 也是最具 备实际意义的特性:FreeMarker提供了强大的 宏 。
此 外 , FreeMarker对JSPTag提供了良好支持 。
我们可以将FreeMarker看作是仅允许使用TAG 的JSP页面(实际上 , FreeMarker的表达式语法 与EL语法也非常类似) 。
从开发角度而言 , 只允 许使用TAG的JSP页面 , 已经在很大程度上保证 了页面表现逻辑与业务逻辑的分离 。
程序员在JSP Script中混杂逻辑代码的原因 , 大部分是出 于慵懒 , 只要无法在页面模板中直接编写Java 代码,相信程序员也不会去专门编写一个JSP TAG 来刻意违反层次划分原则 。
。

稿源:(未知)
【傻大方】网址:/a/2021/0905/0024106931.html
标题:FreeMarker|FreeMarker-macro(宏)的使用( 二 )