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

tpl标签定义

阅读更多
    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更加灵活也更加稳健的变量访问策略.  

分享到:
评论

相关推荐

    关于tpl.js的一个demo

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

    自定义Tpl模板

    - **模板文件(.tpl)**:包含HTML结构和特殊的标签,用于动态数据的插入。 - **配置文件(profile.xml)**:存储关于模板引擎的基本配置信息,如缓存路径、编译文件位置等。 2. **实现步骤**: - 创建模板文件...

    page-tpl.php可用变量

    6. **$body_classes**: 定义页面`&lt;body&gt;`标签的CSS类名,这些类可以用于区分不同类型的页面或特定的用户状态。 #### 三、站点信息 1. **$front_page**: 网站首页的URL,当位于首页时,其值为`$base_path`加上路径...

    前端项目-requirejs-tpl.zip

    【标签】"前端项目"表明这是一个针对Web前端的开发实践,涵盖了用户界面、交互逻辑以及数据绑定等多个方面。在现代前端开发中,这样的项目通常会涉及HTML、CSS、JavaScript以及各种框架和库的集成,旨在提供优秀的...

    TPL0102驱动C语言代码

    在压缩包内的文件“tpl0102-100.pdf”可能是TPL0102电位器的数据手册,其中包含了该器件的技术规格、引脚定义、工作原理以及电气特性等重要信息,对于理解驱动代码的编写至关重要。而“TPL0102驱动.txt”很可能包含...

    DIY-Page模板标签说明

    - **{v:标签名称}**:用于获取并显示预定义的数据,如{v:titlemain}代表二级标题。 #### 循环 - **{loop:标签名称}{/loop}**:用于遍历数据集合,每个循环体内可以使用{lv:标签名称}来获取当前项的数据。 #### ...

    基于PHP的tmd_tpl国产PHP模板引擎v1.0源码.zip

    4. 自定义标签:为了进一步提升模板的可扩展性,tmd_tpl可能会提供自定义标签功能,允许开发者定义自己的标签结构,如`{tagname attr1="value" attr2="value"}...{/tagname}`。 三、tmd_tpl的安装与使用 1. 安装:...

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

    4. 模板继承:通过`{block}`定义区块,并在子模板中通过`{extend}`和`{block}`覆盖或扩展父模板的区块。 5. 循环和条件判断:例如`{foreach $array as $key =&gt; $value}`和`{if $condition}`。 四、使用tmd_tpl的...

    ecshop标签教程

    - **标签定义**:ECSHOP的标签类似于模板语言,用于在模板文件中插入动态数据,如商品列表、分类信息等。 - **标签语法**:通常以`{tag}`形式出现,例如`{ec:goods list}`表示调用商品列表标签。 2. **标签的分类...

    支持相对路径的模板引擎Gotemplate.zip

    基于官方 text/template 和 html/template 的模板引擎. Template 通过几种惯用方式组合, 为模板提供简洁的使用方式.特性: 模板名仿效 URI 格式, 使用全路径名称命名. ... 模板源码可使用相对路径... 标签:Gotemplate

    jsp 自定义标签 供自学时用

    这里 `uri` 属性定义了 TLD 的位置,`prefix` 属性定义了一个前缀,用来在页面中引用该标签库中的标签。 ##### 4.2 实现标签 标签的实现可以通过两种方式来完成: 1. **Class 文件**:将 Tag Handler 存储为 `....

    PyPI 官网下载 | dj-qiyu-tpl-0.3.7.tar.gz

    标签“Python库”说明了dj-qiyu-tpl是一个Python编程语言的库。Python库是由一系列预先编写好的函数和类组成,可以被导入到Python项目中,以实现特定功能或简化开发工作。开发者通常会创建并发布自己的库来解决特定...

    ecmall常用标签.pdf

    这是PHP代码块的开始和结束标签,可以定义数组、执行逻辑判断等操作。但在标准的模板设计中,通常建议尽量减少PHP代码块的使用,以保持模板的可读性和可维护性。 7. **模板内使用HTML转义**: 在输出到HTML页面的...

    xbeanspring-2.6.jar

    我一直坚持xml是人机共享的信道, 应该是人与机器都能够... 在witrix平台的配置文件中, 我们大量使用了tpl模板技术, 通过tpl的自定义标签机制对外提供一些Domain Specific的功能标签, 大大增强了xml标签的语义表达能力.

    PyPI 官网下载 | aedev_tpl_namespace_root-0.2.0.tar.gz

    标签中包含的关键字“zookeeper”、“分布式”、“云原生”以及“cloud native”和“Python库”,揭示了这个软件包可能涉及的技术领域。Zookeeper是一个分布式协调服务,常用于管理大型分布式系统中的配置信息、命名...

    jeecms_3.0+标签的使用

    count='5' channelId='1' channelOption='1']/` 可以展示5篇来自ID为1的栏目的文章,使用系统预定义的样式,并配置了日期格式、标题长度等细节。 8. 默认文章缩略图调用:`${ctt.imgUrl!site.defImg}` 如果文章有...

    jsp自定义标签

    - **定义**:自定义tag标签是用户自定义的一种JSP标记,它能够扩展JSP的功能,简化页面开发并提高代码的可维护性和复用性。 - **用途**:常用于操作隐藏对象、处理HTML表单提交、访问数据库或其他企业级服务如邮件和...

    Open TPL-开源

    4. **隔离与安全**:Open TPL确保模板中的PHP代码不能直接访问到敏感的服务器资源,而是限制在预定义的变量和函数范围内,降低了潜在的安全风险。 5. **易用性与扩展性**:Open TPL的API设计简单,易于集成到现有的...

    tpl-lp3

    它允许开发者通过一系列预定义的标签来构建网页结构,包括标题、段落、链接、图像等元素。在"tpl-lp3"这个项目中,我们可能会看到一系列用HTML编写的文件,这些文件可能是网页模板或者布局的一部分。 在"tpl-lp3-...

    docx4j操作word

    在一个模板中定义好标签,在插入-&gt;书签:然后定义好名称。在Java代码中对标签进行遍历,得到该名称,并替换成相关的内容。 例如,以下代码用于遍历所有的标签: ```java List&lt;Object&gt; paragraphs = wordMLPackage....

Global site tag (gtag.js) - Google Analytics