版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ADF应用程序样例本文档写的内容基础,大侠勿批,新手勿嫌,专门针对不想看英文文档的筒子们在开始写样例之前,先简单的了解一些ADF框架的基本知识ADF框架简要说明一、 ADF的架构ADF也是用的MVC的分层模式,如下图所示:Model层代理数据服务将数据关联在View层,用户则是在View层的UI界面上的操作来更改Model层代理的数据,Controller控制层执行用户的输入和控制页面的导航, business service则是负责处理数据访问和封装业务逻辑。下面为详细图解:二、 ADF的业务组件(ADF BC)1. Entity object(EO)EO代表了数据库表中的一行,它简化了你通
2、过DML来处理的数据操作,EO是允许重复在项目中使用的。2. View object(VO)VO就是单纯的操作通过SQL查询出来结果集,你可以在里面使用所有的SQL语言,如果想通过对VO的操作来影响数据库的话,则VO必须关联EO。3. Application module(AM)简单的说AM就是VO或者可能是其它AM的容器,也管理事务。通过AM可以拿到已经关联上的VO的实例。ADF应用实例下面通过写一个简单的样例应用,来理解ADF框架。1. FileànewàGeneralàApplicationsàFusion Web Application(ADF)
3、2. Application 名称3. 模型层工程4. 设置model层默认包名5. 设置viewController名称及默认包名6. 这时,我们可以在工程结构图中看到如下图所示的一个ADF应用Adfc-config.xml可用于注册manageBean及管理无界界面流,现在不理解不要紧,后面会有说明的。7. 应用已经搭建起来了, 接下来要做的则是创建应用的ADF BC(业务组件)了。8. 选择ADF Business ComponentsàBusiness Components from Tables9. 接下来便弹出创建Business Components的向导,点击“+”1
4、0. 创建一个数据库连接11. 选择刚刚创建的数据库连接,点击OK12. 进入创建EO对话框,修改包名,点击Query查询出数据库中所有的table,然后选择Dept及Emp两张表,点击“>”将两张表拖至右边。13. 可以修改对应EO的名称,我在相应EO后面加上了EO字样。14. 进入创建可更改VO页面,修改包名,将两个EO点击“>>”选择上15. 修改VO的名称16. 此为创建只读VO界面,我们在这先不做详细介绍,直接next17. 创建AM18. 此为生成对应的业务组件设计图,在此也不做详细介绍19. 在此页面可以检查相关的将要创建的业务组件信息,然后点击finish.2
5、0. 这时我们可以看到DemoApp应用的DemoModle中便出现了刚才创建的那些业务组件,并且在DataControls里头也显示了相应的VO。21. 现在我们就基于DemoApp来做几个最简单的增,删,改,查。做这些操作则是都使用ADF已经给我们提供好的一些操作及方法,这些方法都在Data Controls中的VO中22. 创建一个JSPX页面,这里简单提一下,jsff和jspx页面都是ADF框架基于jsf页面的拓展页面23. 对新创建的页面进行命名,然后将*.jspx左侧的复选框选择上24. 简单分析一下TestDemoPage1.jspx如上图所示,一个jspx页面必须包含rootv
6、iewdocument form等标签25. 我们将Data Controls中的DeptVO1拖入至页面中,创建一个ADF Table26. 创建ADF Table选项27. 点击OK后,我们将会看到,页面上自动生成了<af:table>标签及里面有对应的<af:clumn>等标签,而且在对应的viewController工程的默认包下自动生成了DataBindings.cpx文件及在pageDefs包下生成了对应TestDemoPage1.jspx对应的页面定义文件28. 到现在为止,我们做的应用可以说已经告一小段落了,我们运行一下TestDemoPage1.jsp
7、x页面看看效果。29. 你可以发现,现在的VO仅仅支持查询及修改功能,接下来我们给他添加上添加及修改的功能,将button拖放到页面30. 将button改名为创建,然后将DeptVO1中option目录下的createInsert方法拖放至button上31. 代码便自动生成为下图所示32. 创建功能至此就完成了,从右边的组件面板中再拖一个commandButton至创建按钮的下方,改名为删除。33. 将DeptVO1中的删除功能拖放至删除按扭中34. 点击OK,则会出现如下代码,然后我们再次运行TestDemoPage1.jspx35. 可看到运行效果图示如下,当我们点击创建按钮的时候,会
8、在选择中那一行的上方,创建一条空记录,并且将空记录也变成了选择中的状态,然后我们便可以在其中输入需要的数据了。36. 然后我们再选择Deptno为99的那一行,再点击删除按钮37. 会发现数据则被删除了,这时,其实存在着一个问题,你可以去数据库中查询对应的Dept表,在这里顺便讲一下在Jdeveloper中怎么连接数据库和操作数据库,在Jdeveloper中使用DataBase Navigator进行查看38. 打开后能在这看到所有应用程序的数据库连接39. 打开连接,会多一个名为DemoApp的文件,在这文件里你可以书写任何SQL语句40. 我们这只查看Dept表中的数据,可以在以上文件中写
9、SQL,也可以双击Dept表,我们会发现,Dept表中并没有我们刚才加入的Deptno为21的数据,并且Deptno为99的数据还存在于数据库中。造成这个问题的原因很简单,那是因为我们刚才的那些对DeptVO1的操作都还只是存在于缓存当中,并还未真正将事务提交,所以数据未持久化到数据库中。41. 解决这个问题的办法很简单,我们只需要通过AM将事务提交则可。创建提交按钮,将AM下Operations下的commit操作与按钮关联42. 代码如下图所示:43. 再次运行TestDemoPage1.jspx页面,在没进行任何操作之前,我们会发现提交按钮是灰色的44. 现在我们将Deptno为99的记
10、录删除,删除后发现提交按钮变为可操作按钮了:45. 点击提交按钮,再查看数据库,我们会发现Deptno为99号的则没有了46. 至此,一个最简单基本的增、删、改查的最简单样例了。我们会发现,一点代码都没写,就完成了,是不是会觉得ADF功能封装的强大,只是简单的拖拖拽拽就完成了对数据库表的基本操作。47. 接下来我们再以代码的形式写一个用户登陆样例,首选分别创建login.jspx及error.jspx两个页面48. 然后打开login.jspx页面,开始制作一个简单的登入页面,分别拖入页面两个<inputText>,并将其label属性改成用户名及密码,再拖入一个Button作为登
11、入按钮,改名为登入49. 这样的话登入页面的前台显示的内容就简单的完成了,再看error.jspx页面,我们就加入一个简单的outputText来显示一条信息50. 然后将其value改成相应内容,并设置这个组件的inlinStyle属性为显示红色51. 然后我们打开pageFlows目录下的adfc-config文件52. 将login.jspx,error.jspx和TestDemoPage1.jspx都拖入adfc-config文件中53. 然后再使用Control flow case将login.jspx与error.jspx连接起来,54. 再将login.jspx与TestDemo
12、Page1.jspx连接起来55. 在ADF中,我们叫在adfc-config文件中的jspx页面的导航为无界限的界面流,一个项目中有且只有一个。后面会常用的task flow内的页面导航则称为有界限的界面流,在项目中允许出现多个,并且是允许重复利用的。在这先不作详细介绍。56. 接下来我们再打开login.jspx,将鼠标光标点在commandButton代码中的任意一个位置,再看中对应commandButton的action属性,填入success 57. 运行login.jspx页面,查看效果,当我们点击登入的时候,页面将会跳转到TestDemoPage1.jspx页面中58. 当然,这
13、是最简单的一个页面跳转的例子,真正的登入页面是不可能这么简单的,我们需要给页面加入用户验证,加入用户的登入验证功能则是需要在java代码中做一些简单的业务逻辑处理了,那如何让页面与java代码进行关联上呢,这里则需要引入一个managebean的概念了,首先我们得先了解,什么是managebean,59. 参考链接:4:81/forum.php?mod=viewthread&tid=11&extra=page%3D160. 了解了相关managebean的概念后,我们便开始创建对应jspx页面的managebean吧,首先我们需要创建一个ja
14、va类,名为LoginBean61. 如果不修改包名的话则java类是生成在默认包下的62. 此时java类只是一个单纯的java类,并未将其注册进入adfc-config文件中,只有将其注册到adfc-config文件后,他才是一个managebean,注册managebean的话需要先打开adfc-config文件的overview视图状态,再选择managebean标签属性63. 点击添加按钮后输入相应注册managebean的信息第一列为给managebean命名,第二列则是指定managebean的类,第三列则为managebean的作用域,相关managebean作用域的参考资料可
15、以查看如下网站,4:81/forum.php?mod=viewthread&tid=18&extra=page%3D1或者参考官方说明文档,64. 只要managebean在adfc-config文件中注册成功之后,我们在页面中便可以任意使用了,首先我们先将login页面,将两个输入框进行组件邦定,就是将login页面中的两个输入框分别邦定在managebean中,即与managebean中的属性关联上,65. 我们会发现,用户名的input框中的binding属性出现了如图所示效果#viewScope.loginBean.usernamev
16、iewScope是指managebean的作用域,loginBean是managebean的名称,username则是我们刚才创建的input框对应在managebean中的属性,由此我们可以知道,在managebean中肯定是创建了一个叫做username的属性,66. 我们可以打开loginBean对应的java类进行查看,可以看到多了username的属性及对应的get/set方法,并且类型为RichInputText67. 同理将密码input框也进行组件邦定至loginbean中68. 我们可以看到LoginBean中也多了相应的password属性,类型同样为RichInputTe
17、xt69. 原来我们是让点击登入按钮的时候直接通过action跳转到TestDemoPage1.jspx页面的,现在我们则是需要在其跳转之前做一个用户的登入验证,解决方案则是将action与managebean进行相应的方法邦定,70. 操作完成后,则会发现登入按钮的action属性也自动生成了与loginBean的一个方法邦定的EL表达式下图则为在loginBean中自动生成的登入方法(当然,注释是我加的)71. 我发会发现,此方法是会有返回值的,刚开始我们也是直接在action属性中写success便可以使得页面流转,所以说,这里便可以让我们通过返回值,来控制页面的流转72. 首先,我们得
18、得到用户输入的信息,也就是前台页面中用户名及密码输入框中的值,拿值其实很简单,直接通过我们之前与前台页面所邦定的input框在managebean中的属性中,就已经提供了拿值的方法,如下图所示,73. 我们现在再将项目重新运行一下,74. 点击登入,我们会发现在控制台里打印出了用户名及密码75. 现在我们能得到用户所输入的值了,接下来便是需要做相应的登入验证了,我们便以emp表中的数据作为用户的登入信息, 以ename为用户名,job为密码。76. 现在我们需要定义一个方法,传入用户名及密码,我们则判断他是否存在于数据库中,存在的话则返回true,不存在的话,则返回false,这方法应该写在哪
19、个位置呢。因为managebean是与视图层关联紧密的,所以,对于业务逻辑的相关操作代码尽量不应该写在managebean中,推荐写在对应AM的java实现类中。77. 接下来我们则给我们刚开始创建的AM添加一个实现类,并在实现类中添加一个验证用户是否存在数据库的方法,下图为生成AM的java实现类78. 此时我们就会发现,在Model Project应用中就出现了相应的名为DemoAppModuleImpl的AM实现类79. 我们打开DemoAppModuleImpl来看一下,发现这里面有着纳入其管理的所有VO对应的get方法,80. 然后我们再看一下VO,发现其就是由一个查询做成的,这就意
20、味着,我们能在AM中拿到相应的VO然后就可以通过VO得到相应的数据库中所对应的数据了。81. 对于在AM实现类中,即在java代码中的查询方式,可以参考帖子:4:81/forum.php?mod=viewthread&tid=31&extra=page%3D182. 看完这个帖子后,相信你对vo的查询有一些了解了,在这里我使用我总结的一个查询帮助类,使用的查询方式被称为:“标准结果集查询方式”,我在这种查询方式的基础上做的一个工具类83. 将QueryUtils工具类放在com.demo.util包下84. 下面是查询多条记录时在QueryUtils下的方法(可以放大查看,上面为查询多条记录,下图则为单条)85
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版办公家具展会租赁与销售合作合同3篇
- 二零二五年度武汉东湖风景区旅游开发合同3篇
- 二零二五年度艺术品共同创作与展览合同2篇
- 二零二五版房屋租赁合同免责及维修保障3篇
- 二零二五版灯光照明工程设计咨询合同2篇
- 二零二五版班组分包消防设施分包服务合同样本3篇
- 二零二五版新媒体行业劳动合同制度及知识产权保护协议2篇
- 二零二五年空调销售与绿色消费倡导合同3篇
- 二零二五年度钢管模板租赁环保要求及价格评估合同3篇
- 二零二五版网络安全威胁情报共享与预警服务合同范本3篇
- 验货报告范本(英文版)
- 理想气体热力过程
- 2022度机构编制重要事项的报告【3篇】
- GB/T 25772-2010滚动轴承铁路客车轴承
- GB 31247-2014电缆及光缆燃烧性能分级
- 专利评估报告模板
- 士卓曼种植系统外科植入流程课件
- 二年级下册《一起长大的玩具》导读教学-一场别样的童年之旅
- 二尖瓣狭窄并关闭不全共17张课件
- 某环保企业业务介绍课件
- 心脏瓣膜病护理课件
评论
0/150
提交评论