Common Template Engine 发布版本 | 每日构建 >>  English | 中文
下载 更新 论坛 关于我们
文档
首页概览
模板指南
表达式指南
语法外套指南
配置指南
扩展指南
API使用指南
常见问题
对比其它模板引擎
集成
MVC框架集成
JSP标签集成
缓存策略集成
日志框架集成
数据格式集成
脚本引擎集成
邮件发送组件集成
第三方集成依赖包
工具
调试器说明
查看器说明
模板生成器说明
模板转换器说明
编辑器插件说明
代码生成器说明
开发
架构设计
开发规范
项目计划
需求场景
资源
下载
许可协议
更新日志
UML图
Java Doc
测试覆盖率报告
社区
开发团队
论坛
知识库
邮件列表
问题列表
报告问题

 
CommonTemplate 最新动态

0.8.7 sp1 补丁版本更新:(2008-10-10) 下载...
问题修复:
修复属性语法外套attributeSyntaxCoatAvailable设置无效的BUG. 此BUG导致引擎启用了jericho-html-2.5.jar, 没有此jar包的应用将报错.

0.8.7 版本更新:(2008-10-03) 下载...
问题修复:
修复Object.toJson在两对象互相引用时死循环的BUG
修复静态方法不能调用的BUG, 如: ${&com.xxx.Utils.calc(xxx)}
修复$setting指令String到Locale转换的BUG.
修复"&"和"new"在处理类元和属性上的歧义, 最大匹配类元, 如: ${new com.xxx.User.name} ${&com.xxx.User.PREFIX}
修复调试器在处理层级包含模板时, Step Return不能回到上一模板的BUG.
修复LruCache在移动Key顺序时出现的空指针异常.
修复静态函数被编译器优化后缓存了结果的问题,排除对函数的优化.
修复磁盘缓存并发异常, 并忽略乐观并发无锁读取时的异常.
修复ContextImpl.clear()未调用super.clear()的BUG.
修复磁盘缓存无效的BUG.
补全List有,而Array没有的操作符,使Array和List的处理一致,如:"~","!~","orderby"等.
修复orderby操作符PropertyComparator值覆盖的BUG.
修复${super.super.for},在$for指令嵌套$if指令时,将$if指令也作为一层super的BUG.
修正模板错误指令位置信息(错误指令所在行列均基于1显示)
功能变化:
拆分Visitor为TemplateVisitor和ExpressionVisitor
将$操符符改为new, 与Java保持一致.
is或instanceof操作符的右参字符串引号可省,如:${user is com.xxx.User} 或者 ${user is "com.xxx.User"}
使用$output代替原有$out指令,$out指令改为与${}空名称指令等价
调试器Output内容与线程绑定, 可切换显示.
不再内嵌json和jyaml的源码, 直接依赖json.jar和jyaml.jar
改为通过配置状态开闭语法外套: commentSyntaxCoatAvailable=true, tagSyntaxCoatAvailable=false, attributeSyntaxCoatAvailable=false
将log相应类从standard包移至util包,并增加对Log4J, Avalon, SLF4J, JDKLogging等的集成. 日志集成...
引擎分层结构中,将资源加载与缓存划分到TemplateEngine.
修改属性语法外套在处理HTML注释时空指针异常,并重新简化实现属性语法外套.
重新实现this和super语义, 并增加ScopeHandler扩展点.
将core包的Resource/ResourceLoader改为Source/SourceLoader,避免与tools.bean包的ResourceLoader歧义.
增加staticFunction/staticProperty处理器,区分于systemFunction/systemProperty
新增特性:
注释语法外套, 增加clearSpaceline属性, 如果指令所在行没有其它内容, 则清除该空白行.
完成热加载国际化信息文件.
增加ExpressionFilter扩展点, 在表达式编译之前过滤表达式字符串.
Web环境中, 表达式增加支持< >等XML转义符, 如: $var{session -> name = "kent"}
操作符处理器增加isOperandDotNamed()状态设置,用于将点号作为名称处理.
UnaryOperatorHandler扩展点增加isKeyword()状态的设置, 如: new操作符, 设为关键字的操作符名不能再作为变量名使用.
增加String.newInstance扩展属性和String.newInstance(args)方法
实现ReloadMessageSource, 热加载国际化配置.
$load指令加入指定编码支持. 如: $load{xml: "xxx.ctl", "utf-8"} 或 $load{"xxx.ctl", "utf-8"}
加入标签语法外套支持,如:<ct:if param="users != null && users.size > 0">...</cf:if>
实现PropertiesCodeFilter, 使用如: $code{properties}...$end 或者 $code{ini}...$end
增加扩展属性Object.toXstream, String.fromJson, String.fromXml, String.fromXstream
增加$escape{xhtml}和${String.escapeXhtml}, 类似XML, 但"&apos;"改为"&#39;"
$embed, $include, $display 支持国际化后缀查找, 如: xxx.ctl, 首先查找xxx_zh_CN.ctl, 再查找xxx_zh.ctl, 否则查找xxx.ctl, 配置项: localizedLookup=true 决定否开启此功能.
支持"*/"通配目录:$include{"*/xxx.ctl"} 在当前目录以上的目录中逐级查找xxx.ctl
增加与JDK1.6中的javax.script的脚本引擎集成. 脚本引擎集成...
增加Object[].asList扩展属性, 数组转列表.
增加与JCache的集成适配. 缓存集成...
增加与Map接口适配的ExpressionContext,方便表达式引擎使用.
完成TemplateGenerateTask,使用户可以通过ant调用模板解析任务。模板生成器说明...
增加文件夹生成系统菜单,可通过右键菜单将一个目录中的所有模板生成到另一目录。模板查看器说明...
-----------------
感谢吴勇智加入开发插件.
感谢JRest4Guice开发小组的支持.

0.8.6 版本更新:(2008-08-26) 下载...
Bug Fixed:
修复BeanUtils在访问级安全控制上的BUG
将Class.forName()统一改为ClassUtils.forName(), 使用当前线程类加载器加载类, 并支持基本类型.
修复$for指令以及操作符不能处理基本类型数组(如:int[])的BUG.
修复ExpressionOptimizer处理前导小数点".15"的BUG.
Function Changes:
指令$filterAll改为小写的$filterall, 保持指令命名统一.
$leftTrim, $rightTrim 改为 $ltrim, $rtrim
废弃$forelse指令, $for和$if统一使用$else指令作为否则逻辑.
废弃$overzone指令, 区域定义与覆写统一为$zone.
$block, $time, $capture等指令支持变量区间,如:$block{global -> xxx}
名称定义性指令(如: $block, $macro, $zone等), 参数名称引号可省, 如: $macro{button}, 而不再需要: $macro{"button"}
Visitor加入返回值控制.
指令语法配置分离, 如: syntax.directiveLeader='$'
将TemplateRenderer和ExpressionEvaluator内置的引擎单例化.
修改标准包中的data, code, coat三个子包的类结构.
实现配置缺省继承, 不再必需配置@extends=, 将自动根据所处环境继承默认配置.
New Feature:
增加扩展属性List.sort, Object[].sort
增加扩展属性String.toClass
调试器加入捕获输出功能, 可实时观察输出内容. 调试器说明...
调试器加入打开模板功能, 可同时打开多个模板, 便于设置断点.
调试器线程列表和断点集合树加入右键菜单.
查看器加入直接以调试模式打开方式, 不必再在模板内写$.断点指令. 查看器说明...
自动加载查看器安装目录和当前模板所在目录下的jar包,使得模板配置中的扩展类以及数据相关类可以正常加载.
查看器安装目录和当前模板所在目录,commontemplate.properties配置逐级查找.
增加迭代数据集合转换器(CollectionConverter)扩展点.
增加$setting指令, 用于设置模板上下文参数.
增加$super指令,与$root,$global同为$var的简化指令.
增加$buffer指令, 用于缓冲输出, 将其内部块缓冲为单一字符串输出.
增加boolean值格式化功能,可配置:defaultBooleanValue=true|false
增加OutputConverter接口, 用于拦截输出前对象进行AOP处理.
增加ContextInitializer接口, 用于初始化上下文.
增加autoImport配置项,自动导入宏.
增加EvaluateInterceptor拦截器接口,用于拦截表达式求值过程.

0.8.5 版本更新:(2008-08-04) 下载...
此版本主要完善核心引擎和标准指令集.
Bug Fixed:
修复BeanUtils查找对象属性的BUG.
修复调试器变量树栈溢出BUG.
调试窗口在Tomcat下无效的BUG.
调试窗口变量树改为延迟加载方式(点击节点时加载其子节点), 避免变量相互引用时, 树节点无穷递归.
修复调试器线程列表显示错误的BUG.
修复三目运算符不能处理null值的BUG, ${null ? "a" : "b"}原来错误输出:"a:b", 改正后输出:"b"
加入对表达式未结束括号的检查, 并抛出正确的异常信息.
修改当有多余的$end指令时抛出友好异常信息, 以前抛出空栈异常.
修改ObjectToJsonPropertyHandler, JavaScriptEscapeFilter, StringEscapeJsHandler, 采用JavaScriptUtils实现转义.
对$if, $elseif, $for等指令进行必需有参数表达式检查, 如果没有则抛出异常信息.
修复StringConvertUtils在转换单一字符上的BUG.
修复ClassUtils对参数相近类型的识别, 使表达式中的函数对泛型等均能正常调用.
修复表达式解析出错时, 没有提示出错位置信息的BUG.
Function Changed:
宏指令改为即可以传参, 又可以访问变量上下文.
块指令调用后缀默认值由"_block"改成".block"(可配置)), 如: $table.block{name : "xxx"} ... $end
$using指令代替原有$import指令的功能(将整个模板作为宏), $import指令改为导入模板内的宏定义.
改为采用反单引号表示不转义串, 不再提倡使用@符.
New Feature:
调试窗口模板面板右键菜单加入"属性"项, 显示模板名称,编码,修改时间等信息.
增加对YAML数据格式的支持. 查看器
完成SpringConfigurationLoader, 通过Spring的beans方式组装配置.
实现外部数据加载指令$load{"xxx.xml"}.
增加结束指令对块指令名称的检查, 如: $end{"if"}, 如果参数名称与被结束的块指令不匹配时抛出异常信息.
实现冒号简化语法: $macro:xxx 等价于 $macro{"xxx"}, $end:if 等价于 $end{"if"}
实现任意区间变量定义指令: $var{session -> user = name}, $var{global -> user = name}
增加===和!==操作符, 表示内存地址相等, 保证功能上的完备性.
增加$return指令, 用于中断$macro.
实现递归迭代, 如: $for{menu -> children : menus}
实现注释结束符, 不解释块结束符的转义, 如: $* \*$ *$ 以及 $! \!$ !$
实现展开式列表,如:${1,3..6,9} 输出展开式列表:[1,3,4,5,6,9],而:${1,(3..6),9} 或者 ${1,[3..6],9} 输出两级列表:[1,[3,4,5,6],9]
增加对".12"格式的小数支持, 保持与Java一致.
增加集合乘法支持, 如: ${["a", "b"] * 2} 输出: [a, b, a, b]
增加字符串除号("/")运算, 表示分割字符串, 如: ${"aaa.bbb.ccc" / '.'} 输出数组: [aaa, bbb, ccc]
增加字符串减号("-")运算, 表示过滤字符串, 如: ${"aaa.bbb.ccc" - '.'} 输出: aaabbbccc
增加操作符"^~", "$~", "*~", 与原有的"^=", "$=", "*="功能相似, 不同点在于忽略大写小比较.
增加操作符"^-", "$-" 分别表示截取前后缀,如:${"note.txt" ^- "."} 输出:note ,而:${"note.txt" $- "."} 输出:txt
增加操作符"^?", "$?" 分别表示indexOf, lastIndexOf,如:${"aaa.bbb.ccc" ^? "."} 输出:3 ,而:${"aaa.bbb.ccc" $? "."} 输出:7
增加操作符"*?", 表示整个字符串中匹配子串的个数,如:${"xxxabcxxxabcxxx" *? "abc"} 输出:2
增加C#.Net的is操作符, 功能与instanceof相同, 但更简洁, 提倡使用is.
增加$操作符, 表示创建实例, 如: ${$com.xxx.User(id: 1, name:""james)}
增加sum,avg,max,min等聚合函数, 如: ${sum(3,4,7)} 输出: 14
增加命名转换扩展属性: String.toCamelNaming, String.toCapitalNaming, String.toUnderlineNaming.
增加uncapitalize与capitalize相对应. 去除首字母大写.
增加String.toAscii和toUnicode, 分别表示Unicode码与Ascii码之间的转换.
增加String.toSwapCase, 交换大小写, 把字符串中大写的改为小写, 小写的改为大写, 与toUpperCase,toLowerCase对应.
增加字符填充leftPad和rightPad实现, 如: ${"123".leftPad(6, '0')} 输出:000123
增加 $ignore...$end 指令, 执行指令内部块, 但忽略输出.
增加 $capture{"variableName"} ... $end 指令, 捕获指令内部块输出到变量中.
增加 $strip, $trim, $leftTrim, $rightTrim 等指令, 用于删除空白符和截短两端空白符.
增加 $try $catch 指令, 用于捕获$exec和$eval等动态指令错误.
增加 $assert 指令, 用于断言前置条件,不变式等.
增加数字扩展属性: positive, negative, abs, sign
增加Float和Double类型取整属性 toCeilingInteger(向上取整), toFloorInteger(向下取整)
增加Integer和Long类型转为二进制,八进制,十六进制表示串属性 toBinaryString, toOctalString, toHexString
增加String.empty, whitespace, naming, number等字符串类型状态属性.
------------
感谢James.Li和Andrew.Chen的热心帮助

0.8.4 版本更新:(2008-06-24) 下载...
加强各DriectiveHandler的单元测试.
修复不解释块"$! !$"状态机图的BUG, 并全面整理状态机图.
采用Jericho实现属性语法外套.
完成Debug拦截器, 实现单步执行.
完成Debug单步调试窗口,可通过脱离于编辑器的GUI进行单步调试. 参见: 调试窗口说明...
完成查看器功能,双击*.ctl文件,自动读取数据文件,解析模板,生成html,并用IE打开,如果出错,使用Swing界面弹出错误信息, 使页面开发人员独立于业务开发进行模板测试, 参见: 查看器说明...
完成$snatch指令的实现, $snatch{"../list.jsp"}, $snatch{"/list.jsp", 'UTF-8'}, $snatch{"http://www.163.com"}
修复当$break, $continue 没有表达式时的处理, 即: 支持 $if{xxx} $break $end, 不再需要写成 $if{xxx} $break{true} $end.
修改VariableStorage为弱检查方式, 去掉DefiendException和UndefiendException.
将VariableResolver的lookupVariable改成getVariable, 隐藏实现方式意图.
将MessageSource和Logger移出core包, 放入standard包中实现.
Context加入各属性的setter方法, 以及EventListener添加方法等.
增加数字转换为中文: 如: ${123.toChinese} 输出: 一百二十三
增加数字转换为中文货币: 如: ${123.toChineseCurrency} 输出: 壹佰贰拾叁圆整
增加Boolean.toInteger, false为0, true为1,
增加Number.toBoolean, 0为flase, 非0为true,
增加String.toBoolean, 如: ${"true".toBoolean}
修改"行注释指令", 使其保留换行符, 如: $#xxx \n yyy 将输出: \n yyy
支持无穷数, 用"*"号表示无穷数, 如: ${users[2..*]}
完成异常国际化重构, 将所有异常信息放入国际化配置中.
增加字符串abbreviate操作, 如: ${"abcdefghijk" % 6} 或者 ${'abcdefghijk'.abbreviate(6)}, 输出: abc...
core包增加ExpressionFactory, ExpressionBuilder, TemplateElementFactory, TemplateBuidler, 使第三方工具能脱离模板解析过程构建模板.
Element增加getTemplate(),获取元素所在模板的引用.
------------
感谢Guileen加入开发

0.8.3 版本更新:(2008-03-30) 下载...
此版本新功能较少, 主要为加强测试与BUG修复.
将操作符类型重载处理方式从职责链模式改成配置分派模式.
加入数组格式化器, Object[].toString不再出现地址符, 相关配置: defaultArraySeparator=,
加入输出类型定义配置: response.contentType=text/html
优化编译期常量计算算法. 已可以处理var + 3 + 2等左匹配常量.
修复Taglib输出栈的一个空指针BUG.
加入String.escapeXml, escapeUrl, escapeJs, shaCode, base64Code, 进一步完善转码处理.
加入Object.toJson, toXml, 使数据格式转换更简单.
默认开启函数功能.
实现外部文件引入List和Map.
修复TemplateRenderer求值无效的BUG.
修复list[0..10]下标越界异常.
修复各操作符对null的处理.
增强操作符测试覆盖率.
操作符实现类注释完善.
$for{-1} 参数小于0时改为不迭代(以前为取绝对值)
NumberArithmetic加入对BigDecimal和BigInteger的支持
ListAddOperatorHandler当两个Set相加时, 返回Set.(以前全部返回ArrayList)
修复Boolean判断时0.3约等于0的Bug, 加入对小数的支持
加入@一元操作符, 输出不转义地址字符串, 如: ${@"C:\native\room\u5678\user\java\3333\file.txt"}
全面检查所有操作符与指令实现, 防止抛出NullPointerException与IndexOutOfBoundsException以及ClassCastException
将与第三方适配实现的配置方案放入ext包.
将与struts2集成包, 按struts2的plugin方式打包, 这样在struts.xml的配置可以直接用:<package name="my-app" extends="commontemplate-default">
------------------
感谢yananay参与开发,优化与测试.
感谢saro和keel发现的bug及提出的建议.

0.8.2 版本更新:(2008-02-12) 下载...
核心包类结构全面稳定.
修复了非public内部类,匿名类等的getter取值安全异常的bug。
修复了各数字类型混合运算时与Java不一致的bug。
加入数字类型间转换属性:toByte,toShort,toInteger,toLong,toFloat,toDouble。
修复for指令对Iterator和Enumeration的支持。
加入局部包含功能, $embed{"xxx.ctl#body"}, $include{"xxx.ctl#body"}, $import{button: "xxx.cm#button"}。参见:模板指南...
加入包含时编码功能, $embed{"xxx.ctl", "UTF-8"}, $include{"xxx.ctl", "UTF-8"}, $display{"xxx.txt", "UTF-8"}。

0.8.1 版本更新:(2008-01-30) 下载...
增加JspTagLib适配器支持, 可以在CTL使用Jsp标签库。
增加对struts2(ui)标签库的配置, 参见下载列表中commontemplate-example.zip内的ct_struts2.war。
增加对SpringMVC的集成支持,参见下载列表中commontemplate-example.zip内的ct_springmvc.war。参见:MVC集成指南...
进一步加强EngineHolder.renderTemplate(), 简化Web框架集成, 将Context的创建, response.setContentType()等均内部封装.
核心包增加Constant, Variable, Text, Comment等领域实体。
注释语法采用 $## 和 $** 表示保留在编译结果中, 否则编译后即抛弃。参见:模板指南...

0.8.0 版本更新:(2008-01-01) 下载...
将宏指令的特殊语法(加减号前缀)去掉,改为命名规则。
增加与struts及struts2的集成example,见下载列表的commontemplate-example.zip。

0.7.9 版本更新:(2007-12-27) 下载...
完善集成方案。

0.7.8 版本更新:(2007-12-21) 下载...
加入集合过滤器表达式支持。
调整tools包,集成方案测试通过。

0.7.7 版本更新:(2007-12-13) 下载...
解决模板文件编码问题。
重构配置文件,通过引用名称,给用户留出简单的最基本的配置项。
参见:配置指南...

0.7.6 版本更新:(2007-12-06) 下载...
此版本重构了tools包的集成方案,将所有web集成统一用Listener进行初始化:
<listener>
    <listener-class>org.commontemplate.tools.web.EngineInitializeListener</listener-class>
</listener>
配置默认查找:web应用目录下的/WEB-INF/commontemplate.properties,以及ClassPath根目录下的commontemplate.properties,也可以用context-param指定位置。
EngineInitializeListener会初始化引擎,并将其放入EngineHolder中,
在各集成方案中只需:
Engine engine = org.commontemplate.tools.web.EngineHolder.getEngine();
然后使用engine处理模板...
当然,EngineHolder还有其它一些工具方法,用于辅助常见方案,如:createContext,renderTemplate等。
参见:MVC集成指南...
 

版权所有 © 2007 - 2009 CommonTemplate 开发小组