浏览 2330 次
锁定老帖子 主题:HTTL增加注释语法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2011-09-22
最后修改:2012-02-24
http://www.iteye.com/topic/1114669,本来只是想试验模板引擎性能优化,没想到骂声最多的是HTML属性语法,所以在0.2.0版本加上了HTML注释语法,指令仿Velocity,如:
上一篇帖子:<!--#define(User user, Book[] books)--> <!--#if(user.role == "admin")--> <table> <!--#foreach(book in books)--> <tr> <td>${book.title}</td> </tr> <!--#end--> </table> <!--#end--> 上面的HTTL模板等价于Velocity模板: #if($user.role == "admin") <table> #foreach($book in $books) <tr> <td>${book.title}</td> </tr> #end </table> #end 与Velocity的区别: (1) HTTL指令必需加注释外壳“<!-- -->”,只支持<!--#if()-->,不支持#if(),确保不干扰HTML本身的有效源码。 (2) HTTL指令中的变量不加$符,只支持(book in books),不支持($book in $books),因为指令中没有加引号的字符串就是变量,和常规语言的语法一样,加$有点废话。 (3) HTTL占位符必需加大括号“{ }”,只支持${aaa},不支持$aaa,因为$在JavaScript中也是合法变量名符号,而${}不是,减少混淆,也防止多人开发时,有人加大括号,有人不加,干脆没得选,都加,保持一致。 (4) HTTL与Velocity指令对比:
HTTL保持最小指令集,以后也不会增加指令,所有功能均从表达式上扩展。 语法解析器配置: (1) 配置使用注释语法: parser=com.googlecode.httl.support.parsers.CommentParser 语法示例: <!--#if(user.role == "admin")--> <!--#end--> (2) 如果想使用属性语法,请在httl.properties中配置: parser=com.googlecode.httl.support.parsers.AttributeParser 语法示例: <table if="user.role == 'admin'"> </table> (3) 如果想使用原CommonTemplate语法,请在httl.properties中配置: parser=com.googlecode.httl.support.parsers.CommonTemplateParser 语法示例: $if{user.role == "admin"} $end (4) 如果想同时使用多种语法,请在httl.properties中配置: parser=com.googlecode.httl.support.parsers.MultiParser parsers=com.googlecode.httl.support.parsers.AttributeParser,com.googlecode.httl.support.parsers.CommentParser 语法示例: <!--#if(user.role == "admin")--> <table if="user.role == 'admin'"> </table> <!--#end--> 下载地址: http://code.google.com/p/httl/downloads/list HTTL0.2.0版本变更记录: 1. 增加注释语法并设为缺省,如:<!--#if(...)--> 2. 支持热加载,当文件变更时,自动重新加载,配置:reloadable=true 3. 支持启动时预编译,配置:precompiled=true 4. 异常信息显示出错位置周边内容,更容易排错 5. 支持注释块,不解释块,特殊符转义,如:\#, \$ 6. 支持include,read,evaluate函数(可自行扩展),如:${include("xxx.httl")] 7. 支持集合泛型参数,如:#define(List<Book> books) 8. 自动空指针检测,比如:${user.role},当user为null时不会空指针 9. 自动条件补全,比如:#if(books)等价于#if(books != null && books.size > 0) 10. 支持foreach状态栈,多层foreach时,可通过${foreach.parent.index}获取上层foreach状态 11. 允许设置foreach状态变量名 12. 支持方括号数组,如:#foreach(c in [a, b, c]) 13. 支持双点号序列,如:#foreach(c in a..c)或#foreach(i in 1..2)或#foreach(day in "Monday".."Sunday") 14. 支持集合或运算,选择不为空的集合,如:#foreach(book in books1 | books2) 15. 支持Date类型比较,如:#if(date1 > date2) 16. 支持new操作,如:${new Date()} 17. 支持强制转型,如:#set(user = (User) param) 18. 增加HttlServlet,支持将请求经过MVC框架处理并填充request属性后forward到HttlServlet进行页面渲染 19. 兼容JDK1.5,需配置:compiler=com.googlecode.httl.support.compilers.JavassistCompiler 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||