本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7590765
建立时间:2006年5月29日




[Tapestry]Tapestry框架的扩展的研究
软件技术

lhwork 发表于 2006/7/11 17:46:24

介绍:Tapestry框架底层使用了Hivemind这个小巧的IOC容器,很多功能都有相应的配置文件。 这些配置文件主要包括:service-point(服务点), implementation(服务实现),configuration-point(配置点)和contribution(配置实现)三个关键概念。 其中,服务点定义了服务的接口与默认实现,implementation可以覆盖服务点的默认实现,服务点ID和配置点ID在一个模块中必须唯一。 扩展Tapestry4.0不需要修改tapestry-4.0.jar文件。 实例1:结合一个实例来说明可能更容易理解,比如tapestry- 4.0.jar/META-INF/tapestry.form.validator.xml,其中定义了一个配置点Validators, tapestry使用的校验器都在其中,如果想增加校验器,则可以在/WEB-INF/hivemodule.xml中增加: <contribution configuration-id="tapestry.form.validator.Validators">         <validator name="required2" class="com.mycom.tapestry.validator.Required2"/>             </contribution> 在page中就可以引用增加的校验器 <component id="password" type="TextField">         <binding name="value" value="password"/>         <binding name="hidden" value="true"/>         <binding name="displayName" value="message:password"/>         <binding name="validators" value="validators:required2=login_3"/>     </component> 注意:以上两块代码中的粗体部分必须相同。 实例2:扩展服务的实例,向tapestry中增加初始化任务。 <service-point id="MyApplicationInitializer"         interface="org.apache.tapestry.services.ApplicationInitializer"         visibility="private">                 <create-instance class="com.fitechlabs.xtrade.web.MyApplicationInitializer"/>     </service-point>     <!-- Hook it into the overall application initialization. -->         <contribution configuration-id="tapestry.init.ApplicationInitializers">         <command id="my-init" object="service:MyApplicationInitializer"/>     </contribution>   tapestry启动时会自动执行MyApplicationInitializer的初始化任务。 初始化类只需要实现接口ApplicationInitializer即可。 public final class MyApplicationInitializer implements         ApplicationInitializer {     public void initialize(HttpServlet servlet) {         ServletContext context = servlet.getServletContext();         String contextpath = null;         try {             contextpath = context.getResource("/").getPath();         } catch (MalformedURLException e) {             e.printStackTrace();         }         if (contextpath == null)             throw new ApplicationRuntimeException(                     "Error occured when getting context path.");         contextpath = contextpath.substring(contextpath.indexOf("/") + 1);         contextpath = contextpath.substring(contextpath.indexOf("/"));         GlobalAssets.init(contextpath);     } } 其它:研究tapestry-4.0.jar/META-INF/下其它配置文件,可以对tapestry的众多功能进行扩展。 标准组件的扩展:tapestry框架所提供的组件称为标准组件,它 是在Framework.library中进行定义的,如果想修改标准组件,则可以修改这个文件,设定specification-path为合适的 classpath即可;更好的办法是新建一个库定义mylib.library,其中将标准组件的名字换成新的名字,如: <component-type type="Form2" specification-path="/com/mycom/web/tapestry/form/Form.jwc"/> 引用时使用Form2即可,这样做可以保证框架的完整性,但是需要增加库ID,如:form@mylib:Form。 注意:也可以将以下一行代码放入自己的application文件中,这种做法最佳! <component-type type="Form" specification-path="/com/mycom/web/tapestry/form/Form.jwc"/> 结束语:希望本篇短文能起到抛砖引玉的作用,引导大家对tapestry的诸多功能进行随心所欲的定制和扩展。到目前为止,对应Tapestry4.0的扩展与修改都不需要修改tapestry-4.0.jar文件,欢迎留言进行讨论。


阅读全文(1673) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144754636 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号