tpl自定义标签的设计目标之一是尽量减少配置说明项. 在tpl标签库中, 标签定义格式如下
<标签库名称>
<自定义标签名 demandArgs="argA, argB"
importVars="varA, varB"
otherArgs="optionalArgA, optionalArgB" localScope="trueOrFalse" >
自定义标签的内容, 可以是任何tpl代码
</自定义标签名>
</标签库名称>
demandArgs中指定调用时必须给定的参数的名称列表,
importVars指定从调用环境中导入的变量的名称列表,otherArgs指定可选参数的名称列表. demandArgs,
importVars和otherArgs这三者的集合包含了所有该自定义标签能够接受的参数. tpl编译器会检查这些调用规则是否被满足.
在运行的时候, 未指定的可选参数会被初始化为null.
在调用时明确的指定的变量值会覆盖importVars导入的变量值. 例如
<c:set var="varA" value="a" />
<MyLib:自定义标签名 /> // 根据importVars设定, 在此标签内varA的值为a
<MyLib:自定义标签名 varA="b" /> // args设定会覆盖importVars导入的值,因此在标签内部 varA的值为b
// 调用标签完成后, varA的值恢复为a
tpl中的参数声明方式是非常简化的,但是它仍然保留了最关键的信息:变量名称. 而在弱类型的Expresison Language中, 变量类型本来就不重要. 与jsp tag中的标签声明作个对比.
<tag>
<name>template</name>
<tagclass>edu.thu.web.tags.TemplateTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>src</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
jsp tag这种标签声明方式非常冗长, 提供的有效信息密度很低, 而相对于tpl标签的声明方式所能够提供的附加信息也没有很大的意义. 这种设计上的问题也深深的影响到JSF等派生技术.
localScope参数指定了此自定义标签是否具有局部变量环境, 如果为true(缺省值),
则调用此标签的时候会自动进行变量压栈处理, 在标签内部无法访问参数列表之外的变量, 运行中所产生的临时变量也不会影响到外部环境.
tpl中的变量堆栈与webwork的ValueStack机制是有一些差异的.
webwork2中的ognl语言在访问OgnlValueStack中的对象的时候缺省采用的是一种递归查找机制, 即在当前环境中找不到对象,
则自动查找上一层环境中的变量. tpl中的标签结构可以多重嵌套, 产生非常复杂的结构, 所以缺省情况下tpl标签采用了类似于函数堆栈的设计,
在子标签中的代码一般情况下是无法访问父标签环境中的变量的(除非指定了localScope参数为true).
localScope支持与importVars机制相结合之后, 我们可以实现比OgnlValueStack更加灵活也更加稳健的变量访问策略.
分享到:
相关推荐
1. **引入库**:在HTML文件中,通过`<script>`标签引入`tpl.js`库。 2. **编写模板**:在HTML模板文件中,定义包含占位符的结构,比如`${message}</p>`。 3. **准备数据**:创建一个JavaScript对象,包含与模板相关...
- **模板文件(.tpl)**:包含HTML结构和特殊的标签,用于动态数据的插入。 - **配置文件(profile.xml)**:存储关于模板引擎的基本配置信息,如缓存路径、编译文件位置等。 2. **实现步骤**: - 创建模板文件...
6. **$body_classes**: 定义页面`<body>`标签的CSS类名,这些类可以用于区分不同类型的页面或特定的用户状态。 #### 三、站点信息 1. **$front_page**: 网站首页的URL,当位于首页时,其值为`$base_path`加上路径...
【标签】"前端项目"表明这是一个针对Web前端的开发实践,涵盖了用户界面、交互逻辑以及数据绑定等多个方面。在现代前端开发中,这样的项目通常会涉及HTML、CSS、JavaScript以及各种框架和库的集成,旨在提供优秀的...
在压缩包内的文件“tpl0102-100.pdf”可能是TPL0102电位器的数据手册,其中包含了该器件的技术规格、引脚定义、工作原理以及电气特性等重要信息,对于理解驱动代码的编写至关重要。而“TPL0102驱动.txt”很可能包含...
4. 自定义标签:为了进一步提升模板的可扩展性,tmd_tpl可能会提供自定义标签功能,允许开发者定义自己的标签结构,如`{tagname attr1="value" attr2="value"}...{/tagname}`。 三、tmd_tpl的安装与使用 1. 安装:...
4. 模板继承:通过`{block}`定义区块,并在子模板中通过`{extend}`和`{block}`覆盖或扩展父模板的区块。 5. 循环和条件判断:例如`{foreach $array as $key => $value}`和`{if $condition}`。 四、使用tmd_tpl的...
- **标签定义**:ECSHOP的标签类似于模板语言,用于在模板文件中插入动态数据,如商品列表、分类信息等。 - **标签语法**:通常以`{tag}`形式出现,例如`{ec:goods list}`表示调用商品列表标签。 2. **标签的分类...
基于官方 text/template 和 html/template 的模板引擎. Template 通过几种惯用方式组合, 为模板提供简洁的使用方式.特性: 模板名仿效 URI 格式, 使用全路径名称命名. ... 模板源码可使用相对路径... 标签:Gotemplate
这里 `uri` 属性定义了 TLD 的位置,`prefix` 属性定义了一个前缀,用来在页面中引用该标签库中的标签。 ##### 4.2 实现标签 标签的实现可以通过两种方式来完成: 1. **Class 文件**:将 Tag Handler 存储为 `....
标签“Python库”说明了dj-qiyu-tpl是一个Python编程语言的库。Python库是由一系列预先编写好的函数和类组成,可以被导入到Python项目中,以实现特定功能或简化开发工作。开发者通常会创建并发布自己的库来解决特定...
这是PHP代码块的开始和结束标签,可以定义数组、执行逻辑判断等操作。但在标准的模板设计中,通常建议尽量减少PHP代码块的使用,以保持模板的可读性和可维护性。 7. **模板内使用HTML转义**: 在输出到HTML页面的...
我一直坚持xml是人机共享的信道, 应该是人与机器都能够... 在witrix平台的配置文件中, 我们大量使用了tpl模板技术, 通过tpl的自定义标签机制对外提供一些Domain Specific的功能标签, 大大增强了xml标签的语义表达能力.
标签中包含的关键字“zookeeper”、“分布式”、“云原生”以及“cloud native”和“Python库”,揭示了这个软件包可能涉及的技术领域。Zookeeper是一个分布式协调服务,常用于管理大型分布式系统中的配置信息、命名...
count='5' channelId='1' channelOption='1']/` 可以展示5篇来自ID为1的栏目的文章,使用系统预定义的样式,并配置了日期格式、标题长度等细节。 8. 默认文章缩略图调用:`${ctt.imgUrl!site.defImg}` 如果文章有...
- **定义**:自定义tag标签是用户自定义的一种JSP标记,它能够扩展JSP的功能,简化页面开发并提高代码的可维护性和复用性。 - **用途**:常用于操作隐藏对象、处理HTML表单提交、访问数据库或其他企业级服务如邮件和...
4. **隔离与安全**:Open TPL确保模板中的PHP代码不能直接访问到敏感的服务器资源,而是限制在预定义的变量和函数范围内,降低了潜在的安全风险。 5. **易用性与扩展性**:Open TPL的API设计简单,易于集成到现有的...
它允许开发者通过一系列预定义的标签来构建网页结构,包括标题、段落、链接、图像等元素。在"tpl-lp3"这个项目中,我们可能会看到一系列用HTML编写的文件,这些文件可能是网页模板或者布局的一部分。 在"tpl-lp3-...
在一个模板中定义好标签,在插入->书签:然后定义好名称。在Java代码中对标签进行遍历,得到该名称,并替换成相关的内容。 例如,以下代码用于遍历所有的标签: ```java List<Object> paragraphs = wordMLPackage....