Tapestry

记录学习Tapestry专用布格格。很多文章都转载网络。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 0 文章 :: 4 评论 :: 0 Trackbacks
介绍: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文件,欢迎留言进行讨论。
posted on 2007-01-29 18:26 Tapestry 阅读(601) 评论(0)  编辑  收藏 所属分类: Tapestry

只有注册用户登录后才能发表评论。


网站导航: