浏览 2307 次
锁定老帖子 主题:CommonTemplate0.8.0发布
精华帖 (0) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-02
http://www.commontemplate.org 增加了与struts及struts2的集成sample, (见下载列表中的commomtemplate-sample-0.8.0.zip) 将宏指令的特殊前缀语法去掉, 改成命名约定: 受FreeMarker影响, 它使用仿XML的: <@mymacro/> <@mymacro>...</@mymacro> 使自定义宏可以用行指令及块指令两种方式调用, 当以块指令调用时, 可以用<#nest>回调内部块, (注:<#include>等内置行指令不需要/>结尾) 基于同样的思路, CommonTemplate采用了: $-mymacro{xxx} $+mymacro{xxx}...$end 减号前缀表示行指令调用, 加号前缀表示块指令调用,相当于引入了特殊语法. 这是因为指令的解析在编译期就要决定是行指令还是块指令, 而宏的定义在运行期才能获取. 所以需要标识告诉引擎怎么解析. 然而, 思索良久发现, 一个宏要不就是行指令, 要不就是块指令, 很少把一个行指令用块指令调用,或把一个块指令用行指令调用, 如: $macro{"mybutton"} <input type="button" value="${name}" /> $end 这个宏肯定会用行指令调用,而 $macro{"mytable"} <table> $inner (注:相当于freemarker的nested) </table> $end 这个宏肯定会以块指令调用, 因为它用了inner回调, 也就是说,是行指令,还是块指令,应该在宏定义时就已经决定了,而不是在调用时决定, 所以决定采用命名规则判断是否为块指令(规则可配置) 默认规则为: 以"_block"结尾的宏指令为块指令,如: $macro{"mytable_block"} <table> $inner </table> $end 调用方式与普通指令一模一样, 也就是无特殊语法: 块指令调用: $mytable_block <tr><td></td></tr> $end 行指令调用: $mybutton{name: "Query"} 这样,是行指令,还是块指令,在定义时就决定了,也便于理解, 而引擎可以通过匹配命名规则来解析指令树. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-03
强力支持一下,特别庆祝sample的问世!
|
|
返回顶楼 | |
发表时间:2008-01-03
支持struts2的标签么?
|
|
返回顶楼 | |
发表时间:2008-01-04
xyh 写道 支持struts2的标签么?
struts2的逻辑标签就不需要引入了(CT的指令已包含这些功能), 主要是控件标签的引入, 现在正在考虑引入方案, 是直接用JspTagLib适配器, 还是重新配置指令, 如: $taglib{s: "struts.tld"} $s_textfield{label: "密码", name: "pwd"} 如果确信名称不会冲突,也可以不用前缀: $taglib{"struts.tld"} $textfield{label: "密码", name: "pwd"} 这种通过适配器的方式, 可以兼容所有JspTagLib. 也可以在commontemplate.properties中配置指令定义: directive{textfield}=xxx.TextFieldDirectiveHandler |
|
返回顶楼 | |