在ZK中,在我的GenericForwardComposer类中,如何捕获所有onClick和onChange事件?

时间:2011-11-24 03:05:34

标签: java ajax zk

我知道如果我使用匹配的id定义onClick $ id方法,我可以捕获特定的按钮或文本字段。我想要一个通用的onClick-something和onChange-something方法,当单击任何按钮或更新任何文本字段时,它会被调用。这可能与ZK框架有关吗?

1 个答案:

答案 0 :(得分:1)

你可以用两种方式做到这一点。

1)在控制器上定义单个事件处理程序,并将所有其他组件事件转发给该事件处理程序。例如。考虑这个包含3个Button组件的样本ZUML文件

<zk>
<window id="mainwin" border="normal" title="hello" apply="pkg.TestComposer">
    <button id="btn1" label="Click Me 1" forward="mainwin.onClick" />
    <button id="btn2" label="Click Me 2" forward="mainwin.onClick" />
    <button id="btn3" label="Click Me 3" forward="mainwin.onClick" />
</window>
</zk>

现在在应用于包含这3个Button组件的Window组件的控制器中,您可以定义一个onClick事件处理程序,如下所示

public void onClick () throws Exception {
    Messagebox.show("Someone clicked!!!");
}

现在,对于每个Button,您可以使用forward属性并定义目标组件以及要按以下格式处理的事件:forward =“event-name = target-component.target-event”。有关更多详细信息,请参阅转发属性参考here

2)在ZK 6中,使用SelectorComposer和注释定义事件处理程序有更优雅的方法来实现这一点。例如,

@Listen("onClick = window > button") 
public void onClickAnyButton() {
  // ...    
}

有关SelectorComposer的详细信息,请参阅this smalltalk