论坛首页 Java企业应用论坛

给国人的CTE的一些建议

浏览 3482 次
精华帖 (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'
   发表时间: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表达式支持的操作符全部支持。
0 请登录后投票
   发表时间:2008-01-17  
good, 默认的是 禁止调用void函数喽

那静态函数的调用,如何处理呢

还有freemarker中有macro,我觉得很棒,CT中有吗?
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2008-01-19  
对strut2标签的支持的方案确定下来没有?
0 请登录后投票
   发表时间:2008-01-22  
二十一 写道
对strut2标签的支持的方案确定下来没有?


谢谢你的关注,strut2标签集的支持,已经在实现,参见:
http://javatar.iteye.com/blog/158433
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics