有人怀念iSQL*Plus吗?想不想自己做一个?
本文描述如何通过ADF创建一个简单的、执行单一SQL查询并展示其结果集的Web应用。
步骤一:创建一个FusionWeb Application,并建立Model和ViewController两个项目。
步骤二:在Model里创建一个Application Module,并生成其JavaClass。
步骤三:在ApplicationModule的配置里,设置数据库连接为JDBC URL,这样做可以避免在WebLogic上创建显式的JDBC datasource。
1. clearQuery: 能够移除一个名为”X”的ViewObject。你总不愿意在执行了多次查询之后看见OutOfMemory冉冉升起吧。此处”X”将是我用来封装任意查询命令的ViewObject的名字。
publicvoid clearQuery(){
ViewObject vo = this.findViewObject("X");
if(vo!=null){
vo.remove();}
}
2. prepareQuery: 实为创建一个名为”X”的ViewObject,此处我们并不需要执行正真的查询,将来应该利用ADF Binding的Iterator自动执行。该方法中,查询作为形参传入。
public void prepareQuery(String query) {
this.clearQuery();
this.createViewObjectFromQueryStmt("X", query);
}
3. getQueryResult: 返回查询的结果。
public ViewObject getQueryResult(){
returnthis.findViewObject("X");
}
步骤五:将紧前步骤的三个方法全部暴露为Application Module的客户端接口。
此时你的Data Control应该变成这样了:
步骤六:在ViewController项目中创建一个新页面view1。
步骤七:将prepareQuery的形参query抛入view1。
作为Input Text:
作为Button:
至此,页面看上去是这样的:
步骤九:创建一个有边界的任务流,页面类型为jsff。
步骤十:在有边界任务流中创建一个新页面名为bview1。
步骤十一:将getQueryResult的方法返回return抛入bview1。
自动作为一个动态表,代码可以自动生成:
步骤十二:将整个有边界的任务流作为Region抛入view1。
作为View1中的一个Region,用来展示查询的结果:
此时,你的View1应该长成这样了:
步骤十三:为prepareQuery按钮添加一个setActionListener,为一个变量赋值,通过这个变量控制结果显示Region的刷新。
步骤十四:在view1的页面定义文件中找到作为Region的任务流设置,添加RefreshCondition这一属性。
现在,你可以运行view1了。检查一下效果。
输入select * fromhr.employees,点击prepareQuery:
当然,我的这个例子是简化到极限的ADF例子,甚至没有使用显性声明的managed bean。还有很多问题需要处理、许多逻辑需要梳理,比如处理大结果集时需要在ViewObject上做出调整,实现分页;为了使分页的接口更人性化至少需要managed bean的帮助等等。
还有一个彩蛋等着大家,在同一个页面上你第二次执行查询试一下,有什么问题?尝试着解决一下。
最后,稍微和布局控件交涉一下你当然会得到漂亮得多的界面。
开发这回事从来不是一小篇blog能解决的,
需要进一步讨论?戳这里:http://www.databi.cn/thread-89-1-1.html