grails +zkoss 开发总结

本文介绍了ZK框架下组件开发的基本流程,包括服务器端组件的创建、客户端事件处理、组件方法复用等,并提供了示例代码说明如何进行列表排序、设置组件状态等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zk component develop

一、)java 类及方法 1)先开发一个服务器端的组件,通常是继承 abstractComponent ,如果是html 类型的组件,继承HtmlBaseComponent 就可以了。

2)如果需要一个widget需要通知服务器端组件,需要在服务器端的component上注册Client Event http://docs.zkoss.org/wiki/Synchronize_States addClientEvent(Button.class, Events.ON_FOCUS, 0); 3)在服务器端component 上调用客户端widget事件, 用response(event,message) http://docs.zkoss.org/wiki/Invoke_Client_Special_Functions

 

二、)js文件 js 中的 $init 是widget的初始化方法 $define 就是定义widget 的get|set 方法 三、 获取单击单元格对应的列

<zk><zscript></zscript><listbox id="listbox" width="200px"><listhead><listheader label="col1"></listheader><listheader label="col2"></listheader></listhead><listitem><listcell label="a1" onclick="showColumn(self)"></listcell><listcell label="a2" onclick="showColumn(self)"></listcell></listitem><listitem><listcell label="b1" onclick="showColumn(self)"></listcell><listcell label="b2" onclick="showColumn(self)"></listcell></listitem></listbox></zk> listbox grid tree 介绍 http://docs.zkoss.org/wiki/Grids,_Trees_and_Listbox 组件开发向导 http://docs.zkoss.org/wiki/ZK_5.0_Component_Imagepicker

 

 

1 、对于给组件设置menupopup 不起作用的情况 Menupopup menupopup = new Menupopup() menupopup.appenChildren(new Menuitem("a") Grid grid = new Grid() grid.setContext(menupop) 注意:需要 menupop.setParent(grid) // 这个方法需要注意,不是所有的Component都支持Menupopup 也就是说 上下文菜单也需要在 html 中存在,然后,才显示 因为所有的内容都是以html为准备,所以任何组件都必须在html的上下文中存在。

 

2 、设置组件为灰色 yourTextbox.setReadonly(false); yourListbox.setDisabled(false); yourCheckbox.setDisabled(false);

 

3 、对于 Listbox & Grid 的增加和删除,可以通过对他们的Model进行 Add |Remove Listbox.getModel().add(new Object) Listbox.getModel().remove(Object)

 

4 、对于Domain,必须有一个为一个Id 主键,来确保CRUD的一致性 (也可以不要,不过,需要在 listbox 加一个隐藏列来处理)

 

5 、组件的方法复用 A 组件的onClick 方法是用 B 的onClick方法 --便于使用按钮和右键菜单一致的情况 ComponentsCtrl.applyForward(A, "onClick=B.onClick") ComponentsCtrl.applyForward(e.target, "onClick=tbb_pre${zymenu.bh}.onClick")

 

6、验证组件数值的合法性 Textbox.getValue()就自动触发校验

 

7、jar 打包 ,对于不能够执行 generate-domain-from-database ,需要先将对应的类打包起来 jar cvf codeg.jar -C "F:\zkoss\Panform\out\production\Panform" .

 

12、如果对表头排序,不使用默认的排序方式,而使用数据排序

 

def onSortHeaders(){ Msztsbqk msztsbqk = new Msztsbqk() listheadmsztsbqk.getChildren().each { listheader -> listheader.onSort = {Event e -> Listheader l = (Listheader) listheader if (msztsbqk.properties.containsKey(l.getId())) { if (l.getSortDirection() == "ascending") { l.setSortDirection("descending") sortTj = l.getId() + " desc" }else{ l.setSortDirection("ascending") sortTj = l.getId() + " asc" } refresh(pagingmsztsbqk.getActivePage(),sortTj) e.stopPropagation() // 不执行默认的排序方式 } // def sortTj = ?"ascending":"descending" } } }
 

 

 

13、listbox 或者grid 如果使用了ModelList 方式来展示数据,如果要排序,需要 对listbox 排序 如果是使用model ,需要实现ListModelExt 来覆写sort 或者extend ListModelList ,使用 

 

Components.sort(listbox.getItems(),cmpr); public class PanModeList extends ListModelList { private transient Listbox listbox;

public PanModeList(Listbox listbox, List list, boolean live) { super(list, live); this.listbox = listbox; } @Override public void sort(Comparator cmpr, boolean ascending) { Components.sort(listbox.getItems(),cmpr); // super.sort(cmpr, ascending); //To change body of overridden methods use File | Settings | File Templates. } }
 

 

 

然后、listbox.setModel(new PanModeList(listbox,Msqrqk.list(),false))

 

初始化一个组件 使用onCreate http://docs.zkoss.org/wiki/ZK/How-Tos/Concepts-and-Tricks#Dynamic_cursor.2Ffield-sensitiv_help_and_tooltip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值