java 板


LINE

前言,zk是个有趣又简单的开源 java web application framework , (走LGPL/商业授权) 它提供丰富的元件供使用者使用,可以用比以往简单很多的方式撰写网页应用程式。:) ----主题开始---- 请洽javaworld (被打) http://www.javaworld.com.tw/jute/post/view?bid=49&id=288983&sty=1&tpg=1&age=0 没有啦 我开玩笑的...XD 只是因为写了几个范例所以丢过来分享一下。(闲聊zk?还在孵...!) 今天我们要做的效果是有点像是填地址时, 都会有下拉式选单选县市、乡镇市一样,你必须针对所选择的县市去连动乡镇市, 这就是所谓的连动式选单(cascade select) 。 在过去这种方案要嘛就是弄一个很大的js array 整个塞进去, (我记得全台乡镇市好像弄起来还不算多,几百个,累了点而已。) 要嘛就是用所谓的 ajax 技巧即时从server side 拿东西回来填。 这里我们要介绍的会比较接近後者这种作法! 在这个case我们单纯的用选择不同部门底下的小员工来进行说明。 (ex.部门A 有使用者1,2 部门B 有使用者 3,4) 1.首先setup一个zk 需要的jar档跟写好需要的 servlet-mapping 。 (......我会针对这个再写一篇文章的(忏悔 orz)) 2.我们要先准备好要显示的资料层,不然就没东西显示了。(XD) 所以这里会有两个 POJO 一个 Dao ,就只做资料库的查询的物件的对应。 因为讨论的需要所以我是用 JDBC 写 ,但比起JDBC个人更推荐hibernate或ibatis, 可简化一些繁琐的物件映射工作。 POJO简介 Department.java ,公司部门。 有 id 跟名称 Employee.java ,员工资料。 有 id 跟姓名 其中 Department 是一对多 Emploee 的关系。(一个部门有多个员工) 再加上一个负责从资料库查出 Department 跟 Employee 的 Dao。 贴程式码在bbs上是会遭天谴的(谜之音:是你懒得重新排版吧), 所以我们还是放在gist上看吧。(遮耳) https://gist.github.com/700236 3.接着现在我们有一个 DepartmentDao 含有一个 public List<Department> getDepartments() 方法 会回传所有的Departments资料。 我们接着只要写简单的 zul code 就可以达到我们要得效果了。 (不知道什麽是zul code 的请在版上 /闲聊zk (挺), zul 相对於 zk ,勉强可以解释为 jsp 相对於 tomcat 的角色。) 我们这里用了一个比较高阶的技巧 (annotation databinding ), 这东西还蛮强大的,有机会再好好说明,先看看它现在怎麽work。 -------------------------------- <?page title="testCascadeCombobox.zul" contentType="text/html;charset=UTF-8"?> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?> <zk> <zscript> <!-- 相对於 DWR 的 DWR.XML,zk 这里还是走java的玩法。 new 出一个 DAO 来进行查询跟取得资料。 --> import test.combobox.*; DepartmentDao depDao = new DepartmentDao(); List deps = depDao.getDepartments(); </zscript> <!-- 这里是有趣的地方。我们用@{selected} 来代表被选中的物件, 当这个物件被修改之後,所有有引用到这个物件实体(instance)的地方, 都会跟着更新。 所谓的model代表的是一组的资料,在这里就是 List<Dapartment>。 --> <combobox id="combo1" model="@{deps}" selectedItem="@{selected}"> <!-- 这里的 self 有回圈的作用,它会iterate deps 这个list中全部的元素--> <!-- dep代表每个个别的元素,它会用每个元素作成combobox的选项--> <comboitem self="@{each=dep}" label="@{dep.name}" value="@{dep.id}"/> </combobox> <!-- 这里是被连动的combobox ,在第一个combobox被选择产生 selected 之後, 他底下的员工(selected.getEmployees()),将会作为第二个combobox 显示资料。 所以会达成我们想要的连动效果。 --> <combobox model="@{selected.employees}" selectedItem="@{selectedEmp}" > <comboitem self="@{each=emp}" label="@{emp.name}" value="@{emp.id}"/> </combobox> <!-- 这里是个 bonus ,示范在zk中 data binding 是很容易使用的。 --> Current Dep:<label value="@{selected.name}" /> </zk> 这里有执行结果的影片。:) http://0rz.tw/mTFHL -- 网页上拉近距离的帮手 实现 GMail丰富应用的功臣 数也数不清的友善使用者体验 这就是javascript 欢迎同好到 AJAX 板一同讨论。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.44.37 ※ 编辑: TonyQ 来自: 220.133.44.37 (11/15 18:23)
1F:→ TonyQ:题外话,Jing这软体非常好用。一样大推。:D 11/15 18:25
2F:推 Apohades:有神快拜! 11/15 20:42







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP