《adf开发入门教程2多表crudv10004.doc》由会员分享,可在线阅读,更多相关《adf开发入门教程2多表crudv10004.doc(61页珍藏版)》请在三一办公上搜索。
1、项目名称密级ADF开发入门教程-多表CRUD保密版 本共55页LY2011-GZMH-XQSMS-ZSGLXT V1.0ADF开发入门教程-多表CRUD拟 制杨国卫 日期2012-12-14评审人日期批 准日期 广州联奕信息科技有限公司Guangzhou LianYi Information Technology Co., Ltd.版权所有 不得复制Copyright 2012 . All Rights Reserved文档更改历史记录序号主要更改内容版本号更改人更改时间1创建初始版本V1.0杨国卫2012-12-142345678文档分发记录序号文档接收人员版本号发送人发送时间1234567
2、891011说明在做这个教程之前,你要懂得单表的增删改查功能;如果还不懂,请参考ADF开发入门教程-单表CRUD.doc这个教程的数据库没有外键关联目的初步掌握ADF多表增删改查功能。简单的表单验证数据库PDM图创建数据库的代码放在旁边yh.sql,项目源码为yhApp.zip数据库请使用以下用户用户名:wei密码:wei123456开始之前要求:1、 完成角色表xtgl_jsb、部门表xtgl_bm、代码集表xtgl_dmj的单表增删除改查期待的结果:1、完成用户表的增删改查(与用户、角色、代码相关联)单表CRUD的补充步骤建立一个ADF 项目建立ADF Bussiness Componen
3、t增加序列(new oracle.jbo.server.SequenceImpl(S_JSB,adf.object.getDBTransaction().getSequenceNumber()这里的S_JSB就是Oracle数据库的序列用同样的方式将S_YHB、S_BM、S_DMJ加到用户表、部门表、代码集表。用过MYSQL就知道,主键是可以自动增长的,只需要用auto_increment关键字,而在Oracle里,是没有auto_increment关键字来设计自动增长的,只能用序列;如果你还不懂,请看在form表单表,就不再手动去填写id值了,所以:如下面的jsb表的jsid,就可删除掉用户
4、表、部门表、代码集表也是一样,因为每张表加了序列,所以主键ID都不用显示出来给用户手动去填写了,因为主键ID会自动生成值有些字段在页面显示很长,如下图,这是因为这里的长度默认是根据数据库的字段长度来决定的解决的办法 就是设计字段的长度如下面角色名称,双击XtglJsb,双击Jsmc,选择Control Hints,在Display With输入长度,比如50,保存后运行项目看看是不是改变了,其他字段也是同样方式设计的运行效果:你可能会问,在form表单里这里应该显示中文而不是英文,解决办法 就是设计表单显示方式在刚才设计字段显示长度同样的地方,在Label Text输入中文名称,如角色名称,其
5、他字段也是同样的方式运行效果:你又可能会问了,那个“是否超管”应该是用下拉框,怎么可能是输入框呢?只有两个值,“是”或者“否”下面是解决办法:设计简单下拉框在Common Components里找到Select One Choice拖到form表单里sfcg下面点击新增两个select item ,效果如下图点击 finish把inputText 里的value与label属性值copy到selectOneChoice的label与value属性里,然后删除这个inputText运行一下,效果如下:如下图,在角色管理里,是否超管字段,表格里竟然显示1、2,这样肯定不合要求了解决办法如下:表格转
6、化显示方式选中table 里sfcg column 里的outputText,点击Value右边的改为#row.Sfcg = 1 ? 是 : 否运行效果如下:好了,在这里请你先完成角色表、部门表、代码集表的全部单表增删改查,如果你不会,请参考ADF开发入门教程-单表CRUD.doc下面就是用户的CRUD(增删改查)了用户表用户表描述为什么用户不是单表CRUD呢?因为在页面展现除了用户表外,还会有角色表、部门表的信息,在新增用户时,也是保存用户的角色与部门信息;有什么数据库结构不明白的,请置顶看看数据库PDM图请看以下SQL语句与查询结果,一个用户有多个角色、多个部门如果“多角色用户”,它有两个
7、角色(角色之前用,分开),两个部门(部门之前用,分开)在数据库创建视图这是由一个视图查出来的,下面我们要建立两个视图create or replace view role_user_bm asselect tt.zjid,tt.mm,tt.sfqy,tt.yhlx,tt.yhzh,tt.xm,tt.xb,tt.lxdh,tt.gh,wmsys.wm_concat(jsmc) yhjsmc from( select tt.* ,js.jsmc from (select yh.*,ur.jsid from xtgl_yhb yh left join xtgl_yhjs ur on yh.zjid
8、= ur.zjid ) tt left join xtgl_jsb js on js.jsid = tt.jsid) tt group by zjid,mm,sfqy,yhlx,yhzh,xm,xb,lxdh,gh;-华丽的分隔线-create or replace view role_user_bm1 asselect ss.zjid,ss.mm,(CASE WHEN ss.sfqy=0 THEN 禁用 WHEN ss.sfqy=1 THEN 启用 END)sfqy, (CASE WHEN ss.yhlx=1 THEN 学生 WHEN ss.yhlx=2 THEN 教职工 else 其他 E
9、ND)yhlx,ss.yhzh,ss.xm, ss.xb, ss.mc as xbmc, ss.lxdh,ss.gh,ss.yhjsmc,wmsys.wm_concat(bmmc) bmmc1 from( select tt.*,bm.bmmc from (select rub.*,yb.bmid ,dmj.mc from role_user_bm rub left join xtgl_yhbm yb on rub.zjid = yb.zjid left join xtgl_dmj dmj on dmj.dmjid = rub.xb ) tt left join xtgl_bm bm on b
10、m.bmid = tt.bmid) ss group by zjid,mm,sfqy,yhlx,yhzh,xm,xb,lxdh,gh,yhjsmc,mc;请依照顺序建立效果图你可以查询一下结果,右击选择Query data在项目里创建VO这是基于视图的VO在项目里,在EO包里右击选择New Entity Object点击Browse.选择ROLE_USER_BM1只要选择在数据库创建好的ROLE_USER_BM1,点击OK记得也选择好包名点击next,再点击next将Zjid设计了主键,Primary Key一直点击next,直到如下图,设计如下图所示,点击finish(为了方便以后的查看,在
11、这里请注意包名)效果如下图建立页面新建一个yhb.jspx拖入Panel Collection将RoleUserBm1View1拖入到页面选择ADF Read-only Table在这里要注意一下:你可以去用视图查询一下,如下图的查询结果,XB是姓名的代码集,XBMC是姓名的名称,用户要看的是名称而不是代码集(。 用户知道139是什么吗?)所以在Edit Table Columns时,把Xb删除掉,把Xbmc留下,最把Xbmc顺序位置调上一些,(你也根据需求改变一下各各字段顺序)结果如下图:再拖入2个toolButton页面效果图如下图运行效果图如下在页面拖入popup、dialog,再将Xt
12、glYhbView1拖入到dialog里,选择ADF Form在页面拖入“确认删除”dialog(先拖popup,再拖dialog)给三个toolButton加上showPopupBehavior,并把新增button的ID改为new给EO XtglYhb的Zjid加上序列给新增/修改的popup增加绑定Manager Bean,并将contentDelivery改为lazyUncachedpopupFetchListener:popup弹出时调用的方法popupCanceledListener:popup关闭时调用的方法(但点击OK关闭时不调用,以后你慢慢会知道的)也给table绑定一个属性
13、现在进入这个Manager Bean看看提示,按住Ctrl,鼠标点击方法,就可以进入这个方法了进入Manger Bean类如下图所示现在我们开始编写java代码为了方便, 我将MangerBean 简写为MB引用公共类第一,我们要加入两个公共类ADFUtils.java与JSFUtils.java注意哦:JDeveloper不支持直接copy文件到项目里,只能这么做在项目里新建两个类叫ADFUtils.java与JSFUtils.java步骤如下:在ViewController右击选择New后,选择Java Class,点击OK新建的类里面是空的,所以我们要加入一些公共方式,把代码copy进入
14、就可以了第一,我们给这个MB加一个全局变量am,并初始化给新增与修改的popup弹出时调用的方法加入如下代码神马?这个“new”与“CreateInsert”是从哪里来的?其实,这个popupFetchEvent.getLaunchSourceClientId()可以知道你是点击了哪个button,不信你System.out.println();看看,打印就是button的IDcontians(new)方法是判断字符串是不是包含了new,所以在新增button要把ID改为new那个CreateInsert是ADF的内置的绑定,我们在建立这个绑定建立绑定步骤如下:进入页面,在左下角会有一个Bin
15、dings,点击进入点击选择action在Create Action Binding,展开AppModuleDataControl,选择XtglYhbView1,然后在Operation选择CreateInsert,点击OK,建立这个绑定完成了在这里我们再创建几个bindings建立XtglYhbView1的Delete建立RoleUserBm1View1的Execute建立AppModuleDataControl的Commit、Rollback下面是截图建完后如下图所示给新增与修改popup关闭时调用的方法加入以下代码下面我们看看项目运行效果;如下图,我们点击新增的时候,Zjid会自动加上,
16、因为我们给Zjid加了序列,输入各各信息后,点击“确定”,看看有没有新增完成?可能会出现问题:页面没有刚刚新增的记录,查了一下数据库,确实是新增了记录,但页面没有出来;但如果你刷新了整个页面后(按F5),就可以看到新增的记录了解决办法如下:给DialogListener加入执行Execute的方法再运行一下页面,看看效果有一个问题了,我们看看新增的dialogXb竟然是手动输入的,怎么行呢?我们要弄成下拉框,下拉框的值不是写死,而是要从数据库代码集里得到,看看数据库代码集这里我们要用到ADF 的list of Value简称为LOV创建LOV双击XtglDmjView,选择Query,点击右上
17、角的在Where里写入dmfl=:v_dmfl,点击OK在Bind Variables的右边,点击将Name改为v_dmfl,点击OK后,效果如下双击XtglYhbView,选择Attribute,选择Xb属性,点击List of Values右边的点击List Data Source右边的从左边选中XtglDmjView移到右边框,选中右边的XtglDmjView1,点击Edit双击Value输入XB (要用单引号),点击OK在List Data Source选择XtglDmjView1在List Attribute选择Dmjid,选择好后,点击UI Hints在UI Hints里,将Mct
18、移动到右边框,同时将Include “NO Selection” Items去掉点击OK好了,我们已经配置好xb的LOV了我们现在要使用这个LOV刷新一下Data Controls将页面里的Xb 的inputText删除选中XtglYhbView1里的Xb ,拖到页面,选择Single Selection里的ADF Select One Choice 运行一下页面,效果如下:那个Sfqy(是否启用),只有两个值,一个“启用”,另一个是“禁用”,是写死的,按照之前的介绍,弄成下拉框,那个Yhlx(用户类型)也是写死的:1-学生2-教职工3-其他代码如下:把全部弄成中文(不会的请看前面介绍的)因为
19、主键对用户没有用,所以我们把Zjid的inputText删除掉或者隐藏,隐藏的方法如下,加入visible=false页面运行效果如下:现在是不是变得好看多了!你可能会问:新增用户时,怎么分配角色与部门呢?-华丽的分隔线-手写下拉框首先在MB里加入4个以下全局变量属性,然后生成getter、setter右击鼠标,选择Generate Accessors.勾选4个属性的getter、setter,点击OK在getJsItems里加入以下代码:这里的XtglJsbView1Iterator是从页面的bindings里得到的,所以我们要创建这个迭代器,(如果你已经有了这个迭代器,那就不能再创建了,请
20、跳过)创建迭代器进入页面的bindings,点击Executables右边的选择iterator在Create AccessorIterator Binding里,选择XtglJsbView1,点击OK用同样的方式创建XtglBmView1Iterator1效果如下:返回MB,在getBmItems()加入以下代码解释一下这个代码,XtglBmView1Iterator:迭代器的名称Bmid:指定下拉框的选项的value为BmidBmmc:指定下拉框的选项的Label为Bmmc给页面的下拉绑定值在页面里,选择Select Many Choice拖到页面里点击Bind.选择MB下的jsItems
21、,点击OK点击next,在Label输入“角色”,点击finish用同样的方法,创建部门的下拉框提示:选择bmItems效果代码如下:运行页面效果为:目前也只能给你自己看看而已,还不能将部门与角色保存到数据库里呢下面我们进入真正的主题增加分配功能我们把dialog事件改变一下,如下图注意一下:这里的66行Number是指oracle.jbo.domain.Number,我们要手动import进去;如果不手动的话,那就默认为java.lang.Number了,这有可能会出错的。为什么要用Number而不是int或者String呢?这是因为用户的zjid为Number类型,你可以去在XtglYhb
22、的Attributes看看同时,我们还要修改一下popup弹出时调用的方法现在去看看前台页面的代码,找到角色的SelectManyChoice,如下图:我们给selectManyChoice都加入value值页面运行一下:测试测试,看看还能不能新增与删除都可以的话,恭喜你完成70%了-又是华丽的分隔线-下面我们完成 删除功能在页面里找到之前拖入popup 与dialog,并绑定dialogListener进入这个绑定的方法首先我们要想想如何删除用户,因为表与表之前没有外键关联,所以只有手动删除相关联的角色与部门所有,先删除Xtgl_yhjs与Xtgl_yhbm表的信息,再删除Xtgl_yhb的
23、信息嗯,就是这样了!在这个绑定的方法里加入以下代码好了,你再运行页面测试一下,看看能不能删除用户,也可以去数据库查查看,当删除用户了,其分配的角色与部门有没有也一起删除是不是成功啦?功能已经完成了,但我们应该加入一些表单的验证!在这里我以密码为例子把页面代码修改为以下代码:根据你的需求,把其他字段也加上验证吧(PS:姓名输入框太长了)验证也可以在EO设置这个你自己研究一下 项目源代码也放在文档旁边文档先写到这里了,886下面是赠送的中秋节演讲辞,不需要的朋友可以下载后编辑删除!谢谢中秋佳节演讲词推荐中秋,怀一颗感恩之心老师们,同学们:秋浓了,月圆了,又一个中秋要到了!本周日,农历的八月十五,我
24、国的传统节日中秋节。中秋节,处在一年秋季的中期,所以称为“中秋”,它仅仅次于春节,是我国的第二大传统节日。中秋的月最圆,中秋的月最明,中秋的月最美,所以又被称为“团圆节”。金桂飘香,花好月圆,在这美好的节日里,人们赏月、吃月饼、走亲访友无论什么形式,都寄托着人们对生活的无限热爱和对美好生活的向往。中秋是中华瑰宝之一,有着深厚的文化底蕴。中国人特别讲究亲情,特别珍视团圆,中秋节尤为甚。中秋,是一个飘溢亲情的节日;中秋,是一个弥漫团圆的时节。这个时节,感受亲情、释放亲情、增进亲情;这个时节,盼望团圆、追求团圆、享受团圆这些,都已成为人们生活的主旋律。同学们,一定能背诵出许多关于中秋的千古佳句,比如
25、“举头望明月,低头思故乡”、“但愿人长久,千里共婵娟”、“海上生明月,天涯共此时”这些佳句之所以能穿透历史的时空流传至今,不正是因为我们人类有着的共同信念吗。中秋最美是亲情。一家人团聚在一起,讲不完的话,叙不完的情,诉说着人们同一个心声:亲情是黑暗中的灯塔,是荒漠中的甘泉,是雨后的彩虹中秋最美是思念。月亮最美,美不过思念;月亮最高,高不过想念。中秋圆月会把我们的目光和思念传递给我们想念的人和我们牵挂的人,祝他们没有忧愁,永远幸福,没有烦恼,永远快乐! 一、活动主题:游名校、赏名花,促交流,增感情二、活动背景:又到了阳春三月,阳光明媚,微风吹拂,正是踏青春游的好时节。借春天万物复苏之际,我们全班
26、聚集在一起,彼此多一点接触,多一点沟通,共话美好未来,与此同时,也可以缓解一下紧张的学习压力。 相信在这次春游活动中,我们也能更亲近的接触自然,感悟自然,同时吸收万物之灵气的同时感受名校的人文气息。三、活动目的:1. 丰富同学们的校园生活,陶冶情操。2. 领略优美自然风光,促进全班同学的交流,营造和谐融洽的集体氛围。 3. 为全体同学营造一种轻松自由的气氛,又可以加强同学们的团队意识。 4. 有效的利用活动的过程及其形式,让大家感受到我们班级的发展和进步。四、活动时间:XX年3月27日星期四五、活动参与对象:房产Q1141全体及“家属”六、活动地点:武汉市华中农业大学校内七、活动流程策划:1、
27、27日8点在校训时集合,乘车2、9点前往华农油菜基地、果园,赏花摄影3、10点30,回农家乐开始做饭,进行“我是厨王”大比拼4、1点30,收拾食品残物,开始集体活动5、4点,乘车返校八、职能分工及责任定岗1、调研组:负责前期的选址、策划的撰写、实地考察、交通工具的联系和检验组长:金雄成员:吴开慧2、安全保卫组:负责登记参加春游的人数,乘车前的人数的登记,集体活动时同学的请假的审批,安全知识的培训与教育,午餐制作的人员分组组长:徐杨超成员:王冲3、食材采购组:根据春游的人数和预算费用合理购买食材组长:胡晴莹成员:何晓艺4、活动组织组:在车上、赏花期间、主要是做饭完后的集体活动期间的活动的组织组长
28、:武男成员:冯薏林5、厨艺大赛组织组:负责指导各个小组的午餐的准备,最后负责从五个小组里推荐的里面选出“厨王”(厨王春游费用全免)组长:朱忠达成员:严露6、财务组:负责财务的报账及最后的费用的收取,做好最后的决算向全班报告组长:杨雨7、督导组:负责检查各组的任务的完成及协调各小组的任务分工组长:叶青青【注】以上只是大致的责任定岗,组长负主责,各小组要相互配合,相互帮助发挥你们的聪明才智去认真完成任务九、注意事项1、分组要尽量把做事积极的与不太积极的搭配,每组里都要有学生干部,学生干部要起带头作用2、食材的购买不要太复杂了,先前想出菜谱,然后组织大家学习下烹饪知识,注意食材购买的质和量3、注意提
29、醒大家手机充足电,随时保持通讯畅通,有相机的同学带上相机,组织大家多拍几张全家福4、游戏最好要能吸引全部人参加,让同学们能增加了解,班委们能更好的了解同学们的动态,增进感情各组应在规定时间前把活动准备情况向督导组报告,出现紧急情况要第一时报告。督导组也可以及时把活动的准备情况在班委群公布,实时互动。中秋最美是感恩!无须多言,给父母一个微笑,给亲友一个问候,递上一杯清茶,送上一口月饼,这是我们给予父母最好的回报。感谢父母给予的生命,感谢父母给予的培养老师们,同学们,这个中秋,我们要用一颗感恩的心来度过!心怀感恩!感恩一切造就我们的人,感恩一切帮助我们成长的人!心怀感恩,我们才懂得尊敬师长,才懂得关心帮助他人,才懂得勤奋学习、珍爱自己,才会拥有快乐,拥有幸福!老师们,同学们,中秋最美,美不过一颗感恩的心!中秋最美,美不过真心的祝福!在此,我代表学校,祝老师们、同学们中秋快乐,一切圆满!