普通的对象监听器
Dorado7中的很多对象都支持个名为listener的属性,我们可以在此属性中定义一到多个的Listener用于监听对象的初始化过程。目前支持此类监听的对象包括:
- DataType
- DataProvider
- DataResolver
- ViewConfig
- View
- Component(即所有的控件)
可监听的动作包括:
- beforeInit 在对象将要被初始化之前触发,此时系统为尚未将XML中配置的信息初始化到对象中。
- onInit 在对象将被初始化之后触发,此时系统已将XML中配置的信息初始化到对象中。
定义一个监听器的方法与大多数自动方法适配相仿,同时Dorado还在此处提供了自动根据方法名确定监听动作的功能。具体的规则是如果您的方法名是以before开头的,那么Dorado会认为你希望监听beforeInit动作,否则您的方法监听到的将是onInit动作。
例如下面的方式将可以监听某按钮的beforeInit动作:
... public void beforeInit(Button button) { // your code } ...
全局对象监听器
全局对象监听器可以批量的监听上面列出的所有对象或其中的一部分对象。
全局对象监听器不支持方法自动适配,要定义一个全局对象监听器必须继承Dorado7提供的com.bstek.dorado.data.listener.GenericObjectListener<T>类。
该类包含下列3个属性:
- order - 监听优先级,数字越小越先被触发,系统默认的order是999。
- pattern - 要监听的范围,可使用通配符,不定义则表示全部拦截。
- excludePattern - 不监听的范围,可使用通配符。
通过pattern和excludePattern并不是唯一的用来设定监听范围的方法,事实上比这更加常用的应该是利用GenericObjectListener类的泛型。
例如下面的代码因为指定了泛型,将确定该监听器只能监听系统中所有View的初始化动作:
public class ViewListener extends GenericObjectListener<View> { @Override public boolean beforeInit(View view) throws Exception { // your code } @Override public void onInit(View view) throws Exception { // your code } }
向系统中注册一个全局对象监听器的方法如下:
<bean parent="dorado.genericObjectListenerRegister"> <property name="listener"> <bean class="test.ViewListener" > <property name="order" value="1" /> <!-- 拦截优先级 --> <property name="pattern" value="*" /> <!-- 要拦截哪一类View --> <property name="excludePattern" value="com.bstek.public.*" /> <!-- 不拦截哪一类View --> </bean> </property> </bean>