`
canonical
  • 浏览: 368247 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[导入]tpl与FreeMarker的标签对比

阅读更多

witrix平台中的tpl模板技术是一种通用的xml动态标签技术,不仅可以用于文本生成,而且可以用于任何需要动态标签的地方,例如工作流引擎 的配置和执行脚本。tpl模板引擎采用的不是jsp tag的标准机制,而是重新设计并实现的。在开发的后期,因为jstl标准出现,我们对标签的命名作了一定的修改,以尽量符合标准的调用接口。tpl模板 语言完全符合xml规范,其标签定义都是完全独立开发的。在开发tpl的时候,我们甚至没有看到任何类似于c:forEach和c:if的标签设计。但是 我们发现,tpl的动态处理功能与jstl虽然命名不同,但是基本是等价的,所以修改是非常直接的过程。

FreeMarker是一种流 行的文本模板语言,其语法类似于xml tag,但是命名规则不同。这实在是一种令人费解的设计。有意思的是,我们发现tpl的功能集也包含了FreeMarker的功能集。这实际上表明了一件 事情,xml动态标签存在一些必然的功能需求,无论是jsp tag, FreeMarker还是tpl, 所不同的只是表现形式而已。但这种表现形式的差异却又造成了实际功能上的巨大差异。

tpl与FreeMarker具体对比如下。

宏定义
<#macro greet person>
<font size="+2">Hello ${person}</font>
</#macro>]]>

<c:lib namespace="test">
<greet demandArgs="person">
<font size="+2">Hello ${person}</font>
</greet>
</c:lib>

tpl具有更加强大的变量域控制手段,可以通过importVars参数来指定是否使用调用环境中的变量作为缺省参数。另一方面,tpl具有更加灵活的参数校验规则,可以通过demandArgs, otherArgs等参数来指定对自定义标签参数的校验规则。
调用宏
<@greet person="Fred" />
<test:greet person="Fred" />

嵌套内容
<#macro border>
<table border="4" cellspacing="0" cellpadding="4"><tr><td>
<#nested>
<#nested>
</tr></td></table>
</#macro>
<c:lib namespace="test">
<border type="bodyTag">
<table border="4" cellspacing="0" cellpadding="4"><tr><td>
<cp:compile src="${tagBody}" />
</tr></td></table>
</border>
</c:lib>

tpl的<cp:compile>指令在执行时可以指定xslt参数,从而在编译tagBody之前应用xslt变换。
复杂嵌套
与FreeMark一样,嵌套内容可以是复杂内容

<@border>
<ul>
<@do_thrice>
<li><@greet person="Joe"/>
/@do_thrice
</ul>
/@border
<test:border>
<ul>
<test:do_thrice>
<li><test:greet person="Joe" /></li>
</test:do_thrice>
</ul>
</test:border>

导入库
<#import "/lib/my_test.ftl" as my>
<c:lib src="/lib/my_test.ftl" namespace="my" />

创建或替代变量
<#assign mail="jsmith@other.com" />
<c:set var="mail" value="jsmith@other.com" default="xx"/>

判断
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
</#if>
<c:if test="${lt(animals.python.price,animals.elephant.price)}">
Pythons are cheaper than elephants today.
</c:if>

tpl因为是xml语法,算术操作符<和>必须转义后才能使用,使用起来很不方便,因而最终决定tpl不支持操作符,通过lt(), gt()等函数来实现功能。
循环
<#list animals as being>
<tr><td>${being.name}<td>${being.price} Euros
</#list>
<c:forEach var="being" items="${animals}" >
<tr><td>${being.name}<td>${being.price} Euros
</c:forEach>

tpl提供<c:tile>等多种循环方式
include指令
<#include "/copyright_footer.html">
<c:include src="/copyright_footer.html" />

tpl强大的模板功能加上jsplet框架面向对象的能力,使得我们可以轻易的封装复杂的界面组件。而且这种封装能力还不需要Tapestry那种复杂的配置文件。tpl对portal应用的支持也是一个自然的发展过程。

分享到:
评论

相关推荐

    TPL521中文资料 光耦

    TPL521 中文资料 光耦 TPL521 是一款可控制的光电耦合器件,广泛应用在电脑终端机、可控硅系统设备、测量仪器、影印机、自动售票、家用电器等领域,旨在实现信号传输的隔离,以增加安全性、减小电路干扰、减化电路...

    TPL0401数字电位器源码

    标题中的“TPL0401数字电位器源码”是指使用STM32微控制器与TPL0401数字电位器进行交互的程序代码。STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于嵌入式系统设计。数字电位器,又称为数字 pot 或 DIP...

    tpl存储序列化

    **存储序列化(TPL)详解** 存储序列化是一种将数据结构或对象的状态转换为可存储或传输的形式的技术。在计算机科学中,它通常用于将内存中的数据保存到磁盘上,或者在网络上传输数据。TPL(Template Packet ...

    stm32控制tpl0202数控电位器

    在这个系统中,STM32作为微控制器,通过SPI(Serial Peripheral Interface)总线与TPL0202数控电位器进行通信,从而实现对电位器的数字控制。 首先,我们要了解STM32。STM32是意法半导体(STMicroelectronics)推出...

    C# TPL 同步实例代码

    C# TPL(Task Parallel Library)是.NET Framework中用于并行编程的重要库,它使得开发者可以轻松地在多核或多处理器系统上实现并发和并行处理。同步在多线程和并行编程中扮演着至关重要的角色,确保了数据一致性、...

    tpl7407l.pdf

    • 与 与 1.8V 至 至 5.0V 微 微控 控制 制器 器和 和逻 逻辑 辑接 接口 口兼 兼容 容 这个器件包含 7 个特有高压输出的 NMOS 晶体管,这 • 用 用于 于感 感应 应反 反冲 冲保 保护 护的 的内 内部 部自 自振 振荡 ...

    TPL0501EVM数字电位器.pdf

    TPL0501EVM由德州仪器公司设计,用于与基于MSP430的低成本LaunchPad平台配合使用。EVM具备一个预先编程的MSP430G2553微控制器,该微控制器应插入LaunchPad上的DIP插座中。用户可以通过简单的图形用户界面(GUI)来...

    基于PHP的tmd_tpl国产PHP模板引擎.zip

    同时,tmd_tpl还支持自定义标签,开发者可以扩展模板引擎的功能,创建特定于项目的需求。 5. **性能优化** tmd_tpl在编译模板时,会将模板转化为PHP代码,然后执行。这种方式减少了每次请求时的解析时间,提高了...

    基于AD设计的TPL5111定时模块原理图及PCB电路设计资料

    "TPL5111"标签明确了我们的学习和讨论焦点。TPL5111是AD公司的一款定时器芯片,它可能被用于各种需要精确定时功能的应用,如物联网设备、智能家居系统、电池供电设备等。 **文件内容预览:** 虽然没有具体的文件...

    关于tpl.js的一个demo

    1. **引入库**:在HTML文件中,通过`<script>`标签引入`tpl.js`库。 2. **编写模板**:在HTML模板文件中,定义包含占位符的结构,比如`${message}</p>`。 3. **准备数据**:创建一个JavaScript对象,包含与模板相关...

    TPL7407L_16数据手册

    随着电子技术的飞速发展,对于能够适应多种应用场合的驱动器件...无论是在可靠性、效率还是设计灵活性方面,TPL7407L都充分满足了现代电子设计的高标准要求,是设计者在进行电源管理与驱动解决方案设计时的理想选择。

    Laravel开发-tpl

    8. **与前端框架集成**:随着Vue.js等前端框架在Laravel中的广泛使用,`tpl`可能提供了更好的与这些框架集成的方式,使开发者能更方便地在模板中嵌入和管理Vue组件。 总的来说,“Laravel开发-tpl”是一个关于如何...

    TPL-E3_win7驱动

    标签“TPL-E3 win7驱动”再次强调了这个软件包的主要功能,即为TPL-E3型号的网卡提供在Windows 7平台上的驱动支持。 压缩包子文件的文件名列表揭示了可能包含的内容: 1. "Readme-说明.htm" - 这通常是提供安装指南...

    TPL Performance Improvements in .Net 4.5

    文章标题指明了讨论的主题是.NET 4.5中TPL(Task Parallel Library)性能的提升。从描述来看,本文适合初学者,特别是那些使用C#和***的开发者,以便他们能够理解如何利用并行运算来增强.NET程序的性能。 .NET中的...

    TPL与C语言的混合编程方法研究.pdf

    标题和描述中提及的文档是《TPL与C语言的混合编程方法研究》。该文档的主题是探讨了如何将TPL(Test Procedure Language,测试过程语言)与C语言结合进行混合编程。TPL是IEEE Std 1641-2010标准提出的一种新一代面向...

    tpl5010 (1).pdf

    TPL5010 纳瓦级计时器是一款超低功耗计时器,其看门狗功能专为占空比、电池供电型 应用 (比如物联网中的应用)中的系统唤醒功能而设计。

    hypermesh_flac3d.tpl

    hypermesh划分的网格,可以通过它输出成flac3d可以读入的格式。 问题描述:http://bbs.yantuchina.com/read.php?tid=304614

    自定义Tpl模板

    1. **分离关注点**:模板引擎能够帮助我们实现业务逻辑与展示层的分离,这不仅提高了代码的可读性和可维护性,同时也促进了不同角色之间的分工合作。例如,前端设计师可以专注于页面布局和视觉效果的设计,而后端...

    WinHex tpl模板.rar

    tpl模板是WinHex中的一个重要概念,它允许用户预定义一系列的查看和分析设置,以便在处理特定类型的数据时快速应用。本压缩包包含了一系列的WinHex模板文件,用于帮助用户更高效地解析和理解各种文件格式。 1. **...

Global site tag (gtag.js) - Google Analytics