`
javatar
  • 浏览: 1707035 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

CommonTemplate配置方案确定

    博客分类:
  • HTTL
阅读更多
根据前几天的思考:http://javatar.iteye.com/blog/139420
CommonTemplate(http://www.commontemplate.org)的配置方案确定,
采用全setter方式配置,以保持可以用任意IoC容器进行配置,
但为了不依赖于任何IoC容器使用组件,
在util包中实现了一个简单的BeanFactory,作为默认IoC容器实现:
org.commontemplate.util.PropertiesBeanFactory
(实现的是上面思考帖子的第二种方案)

采用properties作为配置,所以需遵循java.util.Properties的所有规则,如:# ! = :等符号需转义等

1.以()结尾表示创建实例,
实例可以注入属性:使用实例的key作为前缀,点号后跟其属性
如:
templateCache=org.commontemplate.standard.cache.FIFOCache()
templateCache.maxSize=1000

前提是FIFOCache中有一个setMaxSize(int)注入函数

2.以[]结尾表示List<Object>,并以其value作为前缀搜索List的项
如:
templateNameFilter=templateNameFilters[]
templateNameFilters[100]=org.commontemplate.standard.filter.TemplateNameRelativer()
templateNameFilters[200]=org.commontemplate.standard.filter.TemplateNameCleaner()
templateNameFilters[200].maxLength=10

下标号用来唯一识别及排序,必需为数字,大小任意。
通常下标号都留一点间距,如上面的100,200,
这样当子级配置继承当前配置时,可以让其配置的templateNameFilter项插在已有的列表项中间。
如子配置中有:
templateNameFilters[101]=com.xxx.YYYFilter()
就会排序到上面配置的中间。

3.以{}结尾表示Map<String, Object>,并以其value作为前缀搜索Map的项
如:
directiveHandlers=directive{}
directive{if}=org.commontemplate.standard.directive.condition.IfDirectiveHandler()
directive{for}=org.commontemplate.standard.directive.iteration.ForeachDirectiveHandler()
directive{for}.statusName=for

下标{}中名称若有符号,均作为字符串。

4.基本类型处理与Java相似
null, true, false为关键字,表示特殊值。
以数字开头的为Number,识别后缀L,F,D,S
以单引号括起的为Character
以双引号括起的为String,如:"xxxx"

5.其它情况均作为String处理,
但若要输出特殊标识的String,必需用双引号,如:"true"

6.采用@extends作为配置继承专用属性,可以多继承,用逗号分隔各父级配置文件,
如:
@extends=org/commontemplate/standard/commontemplate-standard.properties

整个配置的设计思想是,尽可能把所有设置项行级展开,以便于子级配置可以轻松的覆盖父级的所有配置细节,
如:用户可以写一个commontemplate-my.properties:
@extends=org/commontemplate/standard/commontemplate-standard.properties
directive{for}.statusName=for

现在只能用List<Object>和Map<String, Object>作为容器类进行配置,以后会改进加入其它容器。
如果完善后可以考虑抽取出来单独作为一个发行包。

如果各位有好的建议,不妨讨论下。

另,可参见CommonTemplate的标准配置:
org/commontemplate/standard/commontemplate-standard.properties
分享到:
评论
1 楼 javatar 2007-11-15  
改进:
1.以<>结尾表示Set<Object>,并以其value作为前缀搜索Set的项,
如:
sequences=sequence<>
sequence<quarter>=Spring,Summer,Autumn,Winter
sequence<month>=January,February,March,April,May,June,July,August,September,October,November,December
sequence<week>=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

<>内的名称只用来唯一标识,Set结果中不保留,

2.以.class结尾表示创建类元,将以.class之前的名称反射得Class对象,
如:
tagClass=org.commontemplate.side.taglib.IfTag.class


3.以.static结尾表示通过静态字段,
logger=org.commontemplate.core.Logger.DEFAULT.static


4.以().static结尾表示通过静态工厂方法获取对象实例,
logger=org.commontemplate.core.Logger.getDefaultLogger().static

相关推荐

    commontemplate框架

    3. **配置**:配置项目的Web.xml,添加CommonTemplate的初始化参数和过滤器,以启用模板引擎。 4. **编写模板**:创建`.tmpl`文件,编写模板代码,将业务逻辑和视图内容分离。 5. **使用模板**:在Java代码中,...

    commontemplate-0.8.1.jar

    commontemplate-0.8.1.jar,是使用jwebap所需要的jar包。没有它,启动会有错误

    CommonTemplate进入中国开源软件竞赛决赛

    **CommonTemplate进入中国开源软件竞赛...它为Web开发提供了一种高效、灵活的解决方案,有助于提升开发效率,降低维护成本。随着开源文化的发展,我们期待CommonTemplate在未来能持续优化,为更多的开发者带来便利。

    动软分享社区模板

    **动软分享社区系统**是一套综合性的电子商务与社区解决方案,它融合了SNS社区理念与电子商务模式,提供了包括微博文字动态发布、图片分享、视频分享、商品导购及淘宝客推广等多种功能。该系统采用Pinterest式的瀑布...

    zencart模板系统文件笔记2:tpl_header.php.pdf

    *CommonTemplate-tpl_header.php * *thisfilecanbecopiedto/templates/your_template_dir/pagename *example:tooverridetheprivacypage *makeadirectory/templates/my_template/privacy *copy/...

Global site tag (gtag.js) - Google Analytics