浏览 3485 次
锁定老帖子 主题:给国人的CTE的一些建议
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-17
http://www.commontemplate.org/zh/index.html 自家人提点意见和建议 1. 不可以函数调用 禁止函数调用,避免在模板中引入业务逻辑。(允许配置开启非void函数调用) 看了这条,我便不打算使用CTL 因为我每天都在使用freemarker,freemarker中不能调用static 函数的问题,让人很气愤。CTL居然直接不能调用函数,太费解了。 $for(user:UserFunc.usersOf(group)) ...do something with user info... 这种事情,很常见 除此之外,很棒 我想CTL是一个模板语言,而不是一个编程框架,所以“避免在模板中引入业务逻辑”这不是模板语言应该关心的事情,而是框架开发者应该关心的事情。但作为一个潜在需求,可以这样定位: “可以调用函数以及静态函数,也可以声明‘禁止’函数调用,以避免在模板中引入业务逻辑” 2.freemarker的空值处理,很讨厌,动辄大堆异常,NullPointException在模板语言甚至在脚本语言中都显得不太必要,但空值判断很有必要。如: user!'user not defined',在user为空时可以方便的定义空值的显示, 另外三元运算符也很需要,如: (user.id==1)?'id=1':'id<>1' user??user.name:'not defined' 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-17
函数调用默认禁用是有意义的,
允许配置开启非void函数调用,只要配置: functionAvailable=true 而返回类型为void的函数,通常是有副作用(修改状态)的,契约式设计原则也强调这一点, 如果允许调用void的函数,那就变成JSP了,什么都能干,页面与业务逻辑混杂一团。 CT对null的处理是友好的, null的任何未定义属性都为null,如:${null.name} 任何对象的null属性都为null,如:${user.null} null的null属性也为null,如:${null.null} null值默认不输出,如:${null} 可以配置: defaultNullValue=xxx 当遇到null值输出时将以配置值取代之。 你也可以扩展null的属性,如:给null加一个toString属性 ${null.toString} 对空的判断是支持的: ${user == null} 三目运算也是支持的: ${(user.id == 1) ? 'id=1' : 'id<>1'} ${user ? user.name : 'not defined'} 或者用: ${user.name || 'user not defined'} 因为or运算支持javascript风格的非空判定。 如果user为null,null.name依然为null。 注:所有Java表达式支持的操作符全部支持。 |
|
返回顶楼 | |
发表时间:2008-01-17
good, 默认的是 禁止调用void函数喽
那静态函数的调用,如何处理呢 还有freemarker中有macro,我觉得很棒,CT中有吗? |
|
返回顶楼 | |
发表时间:2008-01-19
CT支持宏指令, 并且宏指令的调用方式与普通指令一致: (无特殊语法)
定义: $macro{"mybutton"} <input type="button" name="${name}" value="${value}" class="mybutton"/> $end 调用: $mybutton{name: "done", value: "完成"} CT中也支持参数回传,$inner指令相当于FreeMarker中的#nested。 并且CT中约定以"_block"结尾的宏为块指令: 定义: $macro{"mytable_block"} <table id="${id}" class="mytable" border="0"> $inner{back : "backtest"} </table> $end 调用: $mytable_block{id: "table1"} <tr><td>${back}</td></tr> $end 这篇blog简单的说了宏重构的思路: http://javatar.iteye.com/blog/152492 另外,CT还支持模板继承,在处理layout时比宏更方便,可以看Demo: http://www.commontemplate.org/zh/demo_extends.html |
|
返回顶楼 | |
发表时间:2008-01-19
对strut2标签的支持的方案确定下来没有?
|
|
返回顶楼 | |
发表时间:2008-01-22
|
|
返回顶楼 | |