Tapestry绑定的作用与实现

    Binding是Tapestry一个非常重要的组成部分,同时也是开发者很少接触的部分。绑定是用于为组件实例定义的参数提供数据的机制。有了绑定机制,组件就不必知道数据的来源,它需要的只是在必要的时候可以获取数据。
    绑定在包含该组件的定义文件或模版文件内设置。绑定可以是静态的,或动态的(这不是由组件自身决定的)。组件也可能使用绑定将一个值写回其它对象(典型的是写回某一个组件)。
    简单点说,绑定是页面和组件(确切的说是组件与其容器)的桥梁。页面通过帮定将数据通过绑定传递给组件,组件通过绑定将获取所需要的数据。特别是如果一个组件允许使用非正式参数的时候,绑定就必不可缺了。所有的非正式参数都会作为绑定赋给组件。binding

    上图描述了绑定的所处的地位。以及一些实现了的绑定规则。
    Tapestry组件的使用是通过模板或定义文件完成的。当页面生成的时候页面识别出某个组件,并完成该组件的生成工作之后会根据不同的绑定规则生成不同的绑定实例,并将其设置给组件。比如说常用的"asset:","ognl:","listener:"等。上图中AssetBinding和Expessing就是对应于"asset",和"ognl:"两种绑定。
    Tapestry4对绑定生成的组织是很灵活的,程序员可以分方便的为框架提供新的绑定规则。比方说我在《使用tapestry-prop提高Tapestry运行效率》提到的"prop:"绑定就是通过通过增加一个帮定规则,来完成类似于"ognl:"绑定的功能。但是这种绑定采用的是代码生成技术而不是采用动态调用。
   在《Tapestry改进运行效率的方法》一文中,我分析了Tapestry4内部是如何提高应用效率的,并留下了一个问题,如果能解决监听方法不需要动态调用的话就基本上可以将动态调用降低到最少(我发现的只有<bean>标签的动态调用不容易解决,但是<bean>并不是非用不可的)。最近,我就在着力解决这个问题,编写了一个叫做 "delegate:"的绑定规则。这个绑定使用的是代码生成的方式来调用目标函数,而不是"listener:"绑定使用的动态调用方式。而且更一步的是程序员可以更加精确的定义响应方法了(listener method)。比方说可以有如下的形式"delegate:method", "delegate:method(String)", "delegate:(IRequestCycle cycle, String ,int)", "delegate:method(Java.lang.String)"。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值