日期:2014-05-16  浏览次数:20474 次

初步完成JspTaglib适配
CommonTemplate(http://www.commontemplate.org)已初步完成PageContext, BodyContent, JspFragment, JspWriter 等的适配实现,以及Tag, IterationTag, BodyTag, SampleTag 等的适配回调。
(题外话:JspTagLib的接口不太友好,简单的树遍历做了很多绕弯的接口协议)

tld的引入方式也作了相应调整。

最初的想法是在页面上引入tld:
$taglib{"struts.tld"}
$checkbox{name: "allow"}


但在项目中发现,大家并不喜欢为某个页面单独加载tld,
通常会把所有tld放在一个commons.jsp中,然后inclide进来,
即然如此,放到配置中使用会更方便,并且不需要重复加载解析tld,
另外,页面开发者也不应该关注标签的定义。

现在改成将struts2的相关标签的配置放到:
org/commontemplate/tools/web/struts2/commontemplate.properties
使用时只需继承这个配置(参见配置中@extends的使用)。
配置内容如:
directive{checkbox}=org.commontemplate.standard.directive.taglib.TagLineDirectiveAdapter()
directive{checkbox}.tagClass=org.apache.struts2.views.jsp.ui.CheckboxTag

这样就可以在页面直接使用:
$checkbox{name: "allow"}


现在唯一存在问题的是:
在适配PageContext时,需要相关servlet(jsp页面的编译结果引用), request, response等信息,
而在模板上下文是拿不到的,这里需要一个传递机制,并且保证侵入性较小,
已看过FreeMarker的实现,它将request,response作为一个变量放在模板上下文中,然后取出使用。
先暂且也用相似方式实现,但不放入VariableStorage,而放到ObjectStorage中传递。
等想到更好的办法再重构。

此功能完成后将发布新版本。

希望得到更多意见。
1 楼 xcly 2008-01-25  
关注,期待,,加油!