Oracle Learning Library
第 2 章 —“必须具备”需求:基本搜索应用程序2009 年 5 月发表 单击此处查看“从设计到实践全面了解 Oracle ADF 应用程序”描述和目录。 在本章中,我们将构建 必须具备 需求:最初,我们只需要搜索字段和基本搜索屏幕。 了解了表结构之后,我们现在知道在 Oracle JDeveloper 11g ADF 应用程序中开始构建什么。我们从一个基于“Fusion Web Application 模板”的应用程序入手,该模板提供了由所需的 Oracle ADF 业务组件和 ADF Faces RC 库预先配置的 Model 和 ViewController 项目。
创建视图对象接下来,我们针对所选的 Model 项目运行“Business Components from Tables”向导,基于 parcels 表创建一个只读视图对象和一个应用程序模块,该模块稍后用于向 ViewController 项目提供该视图对象。
为确保一切正常运行,我们在 AppModule 上运行 Business Component Browser。然后,我们会看到来自 ParcelsView 视图对象的以下结果: 现在我们已经创建了视图对象,接下来需要提供搜索功能。Oracle ADF 业务组件支持很多允许用户进行搜索的机制,其中一个机制是默认构建的,可以通过单击 Business Component Browser 中的 View Criteria 按钮进行查看: 在我们的例子中,虽然该机制很有用,但我们都知道即将面临的需求:将字符串搜索字段转换成大写形式从而与数据库数据匹配,并删除运货单编号中的连字符(如果有的话)。 另一种机制是为视图对象创建绑定变量。我们将视图对象查询修改为类似如下所示:
我们注意到同一个命名选项下增加了绑定变量。在这个阶段,我们无需担心将搜索字段转换为大写形式或者更正运货单编号的要求,因此我们不用管其余的查询。我们要注意即使已经将需求放在“应该具备”类别中,这并不意味着我们就应完全忽略它。可以通过使用我们稍后将利用的特性来简化将来的工作。 我们再次通过 Business Component Browser 测试视图对象,以确保没有犯错。这次我们运行视图对象时,将出现一个对话框,要求我们输入每个绑定变量的值。完成后,假设我们输入了有效的搜索值,将返回一条记录: 为此,我们首先需要为 ParcelsView 生成 ViewObjectImpl 类,方法是:打开视图对象编辑器的 Java 节点,然后依次选择 Edit 按钮和 Generate View Object Class 选项: public class ParcelsViewImpl extends ViewObjectImpl {
@Override
protected void executeQueryForCollection(Object queryCollection,
Object[] bindParams, int noUserParams) {
super.executeQueryForCollection(queryCollection, bindParams, noUserParams);
}
... the rest of the class ...
现在,我们可以编写一个方法来提取绑定参数并检查我们收到了多少参数: private void enforceQueryCriteria() {
Object[] attrValues = getNamedWhereClauseParams().getAttributeValues();
int i = 0;
boolean missingParam = false;
while (i < attrValues.length && !missingParam) {
if (attrValues[i] == null || (attrValues[i] instanceof String && attrValues[i].equals("")))
missingParam = true;
i++;
}
if (missingParam)
throw new JboException("You must enter all the enquiry criteria");
}
理想情况下,JboException 消息应源自一个消息包,但我们将简化这个示例。 拥有该方法之后,我们返回到 executeQueryForCollection() 方法,调用之前的 enforceQueryCriteria() 方法以强制执行要求: public class ParcelsViewImpl extends ViewObjectImpl {
@Override
protected void executeQueryForCollection(Object queryCollection,
Object[] bindParams, int noUserParams) {
enforceQueryCriteria();
super.executeQueryForCollection(queryCollection, bindParams, noUserParams);
}
... the rest of the class ...
在 Business Components Browser 中测试该解决方案的过程中,打开 ParcelsView 时将出现一个错误: public class ParcelsViewImpl extends ViewObjectImpl {
boolean firstQuery = true;
@Override
protected void executeQueryForCollection(Object queryCollection, Object[] bindParams, int noUserParams) {
if (firstQuery)
firstQuery = false;
else
enforceQueryCriteria();
super.executeQueryForCollection(queryCollection, bindParams, noUserParams);
}
... the rest of the class ...
构建搜索页面假设 Oracle ADF 业务组件按照我们需要的方式运行,现在该创建我们的第一个 Web 页面了。给定一个名为 SearchPage.jspx 的空白页面,我们可以使用 Data Control Palette 将我们的视图对象拖到该页面上: 总结在本章中,我们了解了如何构建一个基本搜索屏幕以满足应用程序 必须具备 需求。 第 3 章介绍如何向应用程序添加一些其他特性,包括记录用户的 IP 地址(如果他们接受我们的条款和条件)。 | |||||||||||||||||||||||||||||||||||||||||||||||||||