<?xml version="1.0" encoding="UTF-8"?> <zk> <window title="zk使用apply属性关联后台Java类" border="normal" apply="com.civcse.main.MainLayoutComposer" width="300px"> <vbox> <label id="resultLab" value="默认值" /> <textbox id="inputTextbox" /> <button id="runButton" label="运行" /> </vbox> </window> </zk>
在window组件里面使用apply属性关联到后台java类。
package com.civcse.main; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Label; import org.zkoss.zul.Textbox; public class MainLayoutComposer extends GenericForwardComposer { /** * zul组件对象映射 */ private Label resultLab; private Textbox inputTextbox; /* * (non-Javadoc) * * @see org.zkoss.zk.ui.util.GenericForwardComposer#doAfterCompose(org.zkoss.zk.ui.Component) */ public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); // 必须的,作用:变量和页面中zk组件绑定进行初始化变量 System.out.println("渲染后执行自定义初始化"); } /** * onClick$runButton * onClick=事件名称 * runButton=对应的Component id * $必须的! */ public void onClick$runButton() { System.out.println("button click 事件"); if (!inputTextbox.getText().trim().equals("")) { resultLab.setValue(inputTextbox.getText()); } } }
创建过程:1 新建类 MainLayoutComposer 继承 抽象类GenericForwardComposer;
2 手动添加方法public void doAfterCompose(Component comp) throws Exception {},重写抽象类中的方法;
3 在doAfterCompose(Componet comp)方法中必须使用super.doAfterCompose(comp); 初始化和zul页面组件关联的属性。
说明:1 把变量绑定到zk组件,变量名必须和zk组件id同名;
2 事件绑定格式"事件$zk组件id" 例如onClick$runButton onClick=事件名称, runButton=对应的Component id $必须的!
package com.cvicse.main; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Components; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.Composer; import org.zkoss.zul.Label; import org.zkoss.zul.Textbox; public class MyComposer implements Composer { /** * zul组件对象映射 */ private Label resultLab; private Textbox inputTextbox; /* * (non-Javadoc) * * @see org.zkoss.zk.ui.util.Composer#doAfterCompose(org.zkoss.zk.ui.Component) */ public void doAfterCompose(Component arg0) throws Exception { System.out.println("init........."); init(arg0); } /** 固定写法,必须有的 * @param component */ public void init(Component component) { // 将当前对象的变量和参数对象进行绑定 Components.wireVariables(component, this); // 转发一个当前的事件方法到所对应名称的Component() Components.addForwards(component, this); // 注册一个监听到当前的对象 Events.addEventListeners(component, this); } /** * onClick$runButton * onClick=事件名称 * runButton=对应的Component id * $必须的! */ public void onClick$runButton() { System.out.println("button点击了"); if (!inputTextbox.getText().trim().equals("")) { resultLab.setValue(inputTextbox.getText()); } }
说明:1 使用org.zkoss.zk.ui.util.Composer接口可以在方法doAfterCompose(Component arg0)执行渲染后的初始化;
2 init(Component component) 固定写法详细解释请看代码里的注释。init方法使button按钮发生点击事件能够执行onClick$runButton() 方法,实现了zk组件id和变量的绑定。