监听方法
Tapestry框架属于事件触发机制,监听方法是我们在客户端触发服务器端Tapestry框架的主要方式。监听方法有多种形式,当表单form被触发提交的时候,或者当一个链接被单击的时候,就会触发监听方法。监听方法存在于我们的页面类或组件类中,例如,DirctLink组件和Form组件都拥有一个监听参数,我们可以使用一个”listener”字符串将我们页面类中的监听方法绑定在组件的监听参数上。
监听方法其实就是一个普通的功用非抽象方法,它可能携带有参数,也可能返回某种类型的值。Tapestry框架并不强制要求监听方法必须携带参数或必须拥有返回值,一个普通的功用方法一旦与某个组件的监听参数通过“listener”字符串绑定,那么这个普通的功用方法就变成了监听方法。
1. 监听方法的返回类型
监听方法可以使void方法,也可以返回一个String字符串,或者可能是一个实现了IPage接口的页面对象实例。返回一个字符串或返回一个页面对象实例是为了激活并跳转页面以便响应请求。如果返回NULL,则跳转到当前页面。
Void:监听方法跳转到当前页面;
String: 监听方法根据返回的页面名称来激活页面并表现响应,返回NULL,则跳转到当前页面;
IPage:监听方法根据返回的页面类实例来激活页面对象。页面对象可以通过request cycle来获取,也可以通过页面属性注入页面实例来获得,返回NULL则跳转到当前页面;
ILink:监听方法根据返回的实现ILink接口的对象对客户端URL进行重定向。
2.监听方法的参数
当使用DirectLink组件,ActionLink组件,Submit组件等带有parameters参数的组件时,你甚至可以定制该组件的监听方法参数。DirectLink组件的parameters参数所携带的值将会被编码到URL中,以便我们可以通过监听方法的参数来直接获取。
例如:我们通过以下方式调用DirectLink组件。
<component id=”byFruitLink” type=”DirectLink”>
<binding name=”listener” value=”listener:buyFruit”/>
<binding name=”parameters” value=”{fruit.id,fruit.name}”/>
</component>
那么我们可以通过以下两种方式获取DirectLink组件的Parameters参数所绑定的值。
以IRequestCycle 对象作为监听方法的参数,然后通过该对象的getListener Parameters()方法获取一个包含所有数据的数组,再从该数组中依次取出组件parameters参数绑定的值,例如:
Public IPage buyFruit(IRequestCycle cycle){
Object[] parameters = cycle.getListenerparameters();
Integer id = (Integer) parameters[0];
String name =(String)parameter[1];
}
直接以监听方法的参数对应获取每一个DirectLink组件的parameters参数所携带的值。
Public IPage buyFruit(Integer id,String name){
}
第二种方式显得非常灵活。DirectLink组件的parameters参数所携带的值并不一定都是String类型,它可以是任意类型,但是监听方法参数的类型必须与parameters组件参数所携带的值得类型一一对应。