了解 ADF 业务组件的新特性

目的

在本教程中,您将在 JDeveloper 11g 中创建一系列简单的 ADF 业务服务场景。本教程可作为 JDeveloper 11 版中的一些新的 ADF BC 功能的简要介绍。

要成功运行页面,必须使用 IE7 或 Firefox。

主题

本教程包括下列主题:

 概述
 前提条件

构建值级联列表

增强计算和验证

创建一个命名查询

详细了解 JavaServer Faces 页面中的业务组件特性

 总结

查看屏幕截图

 将鼠标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

概述

以下为详细了解 ADF BC 新特性的一组完整的场景。

值级联列表

第一个场景展示使用 Oracle JDeveloper 11g 设置 LOV 比以往更为简便。大部分数据密集型应用程序要求用户从列表中选择值。通常,一个域的有效选择列表依赖于用户在另一个域中所进行的选择。例如,在一个全球商业应用程序中,用户可能首先选择国家,然后使得应用程序显示在该国销售的产品列表。

能够简化值列表 (LOV) 的创建以支持这种情形,这一直是对 Oracle 应用开发框架 (Oracle ADF) 11g 的最普遍增强要求之一。在 Oracle ADF 11g 中,您可以将值列表配置为任何视图对象属性的声明特性之一。通过在模型层(而不是在用户界面 (UI) 处)定义值列表,可以确保您的 UI 将正确、一致地显示值列表,与您决定使用的受 Oracle ADF 支持的特定 UI 客户端技术无关。

增强的计算和验证

第二个场景展示了现在在无需编写任何 Java 代码的情况下,创建经计算的属性、验证外键值、约束相互依赖的属性值,以及定义更复杂的验证规则是多么简单。

Groovy 是用于 Java 平台的基于标准的动态语言,定义为 Java 规范请求 241 (JSR 241)。它为许多常见的编程任务提供了比 Java 更简单的语法,它可以与任何 Java 类无缝地进行互操作,并且可以即时编译和解释。Oracle ADF 11g 为 Groovy 语言提供了广泛支持,第一个示例将演示如何使用 Groovy 表达式定义计算后的属性。

创建一个命名查询

您定义的命名查询允许您指定视图对象集合的行的筛选信息。命名查询对象是一个包含一个或多个命名查询行的行集,其属性是视图对象中的那些对应属性的镜像。命名查询定义包含添加目标视图对象的 WHERE 子句的查询条件。您指定的查询条件应用于目标视图对象的单个属性上。

返回主题列表

前提条件

 启动 JDeveloper 11g
 创建一个新的应用程序

返回主题列表

启动 JDeveloper 11g

1.

可以访问或已安装了 Oracle JDeveloper 11g。查看安装指南,以了解其他要求。

这一版本的 OBE 使用 Oracle XE 数据库完成。如果您使用其他数据库版本,约束名称将不同。

2.

启动 JDeveloper。双击 JDeveloper 可执行文件 ( jdeveloper.exe ),该文件可以在 JDEV_HOME 目录中找到。

如果 Select Role 对话框弹出,接受默认角色并单击 OK

如果 Migrate User Settings 对话框打开,请单击 NO

关闭 Tip of the Day 窗口。

3.

现在应显示 JDeveloper IDE。

返回主题

返回主题列表

创建新的应用程序和项目

1.

选择 Application 选项卡并单击 New Application(或者,选择 File | New 以显示 New Gallery,然后选择 General | Application 创建新的应用程序)。

2.

在 Create Application 对话框中,将应用程序名称设置为 ADFBC

保留 Application Package Prefix 属性为空。

选择 Fusion Web Application (ADF) 作为 Application Template。

单击 OK

3.

Application Navigator 应如下所示:

返回主题

返回主题列表

构建值级联列表

 设置模型
 定义值列表
 配置值列表
 测试值列表

返回主题列表

设置模型

在本部分中, 您将为 DEPARTMENTS 和 EMPLOYEES 表创建默认的实体和试图对象。这些实体和视图对象是值列表的基础。

1.

我们将在 Model 项目中创建实体和视图对象。右键单击 Model 项目,然后选择 New

2.

在 New Gallery 中,展开 Business Tier 类别并选择 ADF Business Components 类别。然后,选择 Business Components from Tables 项并单击 OK

3.

在 Connection 域旁边,单击 Add  按钮,使用以下信息创建到 HR 模式的新连接。

Connection Name

HR

Username/Password

HR/

Save Password & Deploy Password

两个复选框均选中

Driver Thin
Host Name 安装了该模式的计算机

SID

安装了 HR 模式的数据库

测试连接以确保它能正常工作,然后单击 OK

连接应当出现在 Initialize Business Components Project 页面中。

单击 OK 继续定义业务组件。

4.

JDeveloper 将连接到模式,允许您定义需要的组件。从 DEPARTMENTS 和 EMPLOYEES 表创建实体对象。

单击页面右侧的 Query 按钮,从所连接的模式检索所有表。选择 DEPARTMENTSEMPLOYEES 表,然后将它们移至 Selected 一侧。

Selected:窗格中,选择每个表名称,然后将 Entity Name 更改为更短的单一形式。

DEPARTMENTS — Dept

EMPLOYEES — Emp

单击 Next 继续,定义视图对象。

5.

在该向导的第二步,将 DeptEmp 这两个实体对象移至 Selected 一侧。这将创建两个可更新的视图对象。

再次单击 Next,您将转至 Application Module 页面。

6.

在该向导的 Application Module 页面上,确保选中 Application Module 复选框,然后单击 Finish。这将构建一个包含您刚创建的视图对象的应用程序模块。

Application Navigator 现在应如下图所示。

保存您的所有工作。

7.

右键单击 AppModule 并选择 Run。这将调用测试器并允许您验证业务组件是否正常工作。

单击 Connect 按钮使用默认连接。

测试器显示后,双击 EmpsView1 节点。默认情况下将显示所有员工记录,Mgr 和 Deptno 项没有值列表。

退出测试器。

在下一部分中,您将加入值列表以便终端用户选择部门和经理。

返回主题

返回主题列表

定义值列表

现在已经创建了基本的模型层对象,下一步将创建值列表。

首先,您要为 Mgr (manager) 属性添加一个更为复杂的值列表。该列表将引用一个新的视图对象,该对象查询一个经筛选的员工列表(这些员工可作为当前员工的经理)。在本例中,我们假设某一员工的可用经理列表将是同一部门的其他员工列表以及任何没有经理的员工(如总裁)。

1.

创建一个视图对象显示可将员工分配给其的经理。

在 Applications Navigator 中,右键单击 Model 项目并选择 New。选择 ADF Business Components 类别,双击 View Object 组件打开 Create View Object 向导。

2.

在 Name 面板中,将 Name 更改为 ManagerListForDepartment,然后单击 Next

3.

在 Entity Objects 面板中,从 Available 列表中选择 Emp 实体对象 单击 Add  按钮,然后单击 Next

在 Attributes 面板中,包括 EmployeeIdLastName 属性,再单击 Next 两次转至 Query 面板。

4.

Where 域中,添加以下 WHERE 子句:

(DEPARTMENT_ID = :CurrentDept OR MANAGER_ID IS NULL) AND EMPLOYEE_ID != :CurrentEmp

该子句将筛选员工列表以生成您上面定义的集。

单击 Next 添加绑定变量。

5.

在面板中,创建两个新变量 CurrentDeptCurrentEmp(WHERE 子句引用了它们),将这两个变量均设置为 Number 类型。

现在单击 Finish 创建视图对象。

返回主题

返回主题列表

配置值列表

现在已经创建了基本的模型层对象,下一步将配置两个值列表。在 Oracle ADF 11g 中,您可以将值列表配置为任何视图对象属性的声明特性之一。通过在模型层(而不是在用户界面 (UI) 处)定义值列表,可以确保您的 UI 将正确、一致地显示值列表,与您决定使用的受 Oracle ADF 支持的特定 UI 客户端技术无关。

1.

配置员工 Deptno 值列表

在 Application Navigator 中,首先双击 EmpView 打开视图对象编辑器。注意,在 Oracle JDeveloper 11g 中,业务组件编辑器作为主编辑器区域中的一个选项卡出现,而不是出现在模块化的对话框中。

在编辑器的左边选择 Attributes 类别,然后选择靠近编辑器框顶部 Attributes 部分中的 DepartmentId 属性。

2.

找到下面的 List of Values:DepartmentId 部分标题,单击标题右侧的绿色加号  图标创建 DepartmentId 属性的列表值。

当 List of Values 对话框出现后,单击 List Data Source 中的绿色  图标添加一个数据源,该数据源为该属性的值提供有效选择列表

在出现的 View Accessors 对话框中,选择左侧 Available View Objects 列表中的 DeptView 视图对象,然后单击 Add Instance  按钮为所选视图对象添加一个名为 DeptView1 的新视图访问器。然后单击 OK

3.

注意,新添加的视图访问器数据源 DeptView1 出现在 List of Values 对话框的 List Data Source 树中。

展开它,选择其 DepartmentId 属性。注意, List Return Values 部分进行了更新,它显示用户在列表中进行选择时,列表数据源中的属性如何分配给基础视图对象中的属性。

您不需要为本示例更改这一部分,但要注意您可以映射应用程序中其他的返回值属性,方法是将它们添加到该列表中。

4.

在离开 List of Values 对话框前,单击 UI Hints 选项卡。这些设置提供了定义列表在用户界面中的显示方式的信息。注意,Default List Type 指明了 Choice List 显示类型。在这个简单示例中,您将使用这一默认列表类型,但是如果您单击列表,您将看到您可以在自己的应用程序中使用的其他列表控件类型。

在 Display Attributes 部分中,从 Available 列表中选择 DepartmentName 属性,然后单击 Add(右箭头)  按钮将其添加到所选属性列表。该选择表示您希望用户在列表中看到部门名称,而不是部门编号。

最后,单击 OK 关闭 List of Values 对话框。

5.

配置员工的经理值列表。

与前面一样,在视图编辑器的 Attributes 部分中为 EmpView 对象选择 ManagerId 属性。然后,单击 List of Values: ManagerID 部分标题中的绿色加号  图标。

6.

当 List of Values 对话框出现后,单击 List Data Source 部分中的绿色  图标添加一个新数据源,该数据源为该属性的值提供有效选择列表。

View Accessors 对话框中,选择左侧的 Available View Objects 列表中的 ManagerListForDepartment 视图对象,然后单击 Add Instance  按钮为所选视图对象添加一个名为 ManagerListForDepartment1 的新视图访问器。

不要关闭该窗格,下一步要修改访问器的属性。

7.

因为该视图对象具有绑定变量,您需要配置这些绑定值如何获取其值。要完成此任务,确保选择了 ManagerListForDepartment1 视图访问器,然后单击 Edit 按钮。

Edit View Accessor 对话框中,注意绑定变量名称 CurrentDeptCurrentEmp 出现在 Bind Parameter Values 部分中。

您希望将该绑定变量的值指定为当前行中的 EmployeeId 属性的值,因此在该单元格中输入表达式(区分大小写) EmployeeId 。类似地,双击 CurrentDept 绑定变量的值列,输入表达式 DepartmentId 将该绑定变量的值指定为当前行中 Deptno 属性的值。

单击 OK 关闭 Edit View Accessor 窗口,然后再次单击 OK 关闭 View Accessor 窗口。

8.

在 List of Values 对话框中,展开 List Data Source 树中的 ManagerListForDepartment1,然后选择它的 EmployeeId 属性。然后单击 UI Hints 选项卡。

与前面一样,将 LastName 配置为列表的显示属性。

单击 OK 关闭 List UI Hints 对话框,然后再次单击 OK 关闭 List of Values 对话框。

保存您的所有工作。

返回主题

返回主题列表

测试值列表

您可使用增强的 Oracle ADF 11g Oracle Business Component Browser 立即测试您刚配置的 LOV。

1.

要在 Oracle Business Component Browser 中运行应用程序模块,右键单击 Application Navigator 中的 AppModule 组件并选择 Run

2.

在您单击出现的对话框中的 Connect 后,Oracle Business Component Browser 将出现。双击 EmpView1 视图对象实例查看其数据。

ManagerId 和 DepartmentId 两者均以列表形式显示。

3.

如果您选择 ManagerId 列表,您将注意到列表包括当前部门的员工(不包括当前的员工)以及像 KING 一样没有经理的员工。

当您导航至结果集中的不同行时,您会看到列表自动更改以显示当前员工当前所在的部门。如果您通过从列表中选择一个不同的部门名称来更改员工的部门,您会注意到当您选择 Mgr 列表时,选项集将自动进行更新以反应这个新部门。

试验完成后,选择 File - Exit 退出 Oracle Business Component Browser.。因为在 Oracle JDeveloper 11g 版本中结合了 Oracle ADF Swing 对 Oracle Business Component Browser 进行了重新实施,所以本示例还简要展示了 Oracle ADF Swing 应用程序如何自动使用模型定义的 LOV。

返回主题列表

增强计算和验证

 简化计算后的属性
 验证外键
 约束依赖值
 编写 Groovy 验证规则

返回主题列表

简化计算后的属性

在您使用的 ADFBC 工作区中,Emp 实体对象需要一个临时属性 TotalComp。将该属性定义创建为员工工资和佣金的总和(分别由 Salary 和 CommissionPct 属性定义)并进行更新。在该公式中,要考虑 CommissionPct 和 Salary 可能为空的情况。

1.

在 Application Navigator 中,双击 Application Navigator 中的 Emp 实体打开 Entity Object Editor

2.

单击 Attributes 选项卡转至 Attributes 页,然后单击 Add 按钮  创建一个名为 TotalComp、类型为 Number 的临时属性。

取消选中 Persistent 复选框并针对 Updatable 属性取消选中 Never

单击 OK。然后双击 TotalComp 属性,调用编辑器以指定计算。

在 Attribute Editor 对话框中,确保选中了 Value Type 单选按钮组中的 Expression 单选按钮。在 Value 域,输入以下公式:

(Salary!=null?Salary:0)+(Salary*(CommissionPct!=null?CommissionPct:0))

该表达式使用一个三元操作符,该操作符测试一个布尔条件 (Salary!=null),如果 Salary 不为空或零的话将返回其值。然后对 CommisionPct 值执行类似的计算,将 Salary 与 CommisionPct 值相乘,然后返回两个计算的总和。

不要退出编辑器。

3.

要完成属性分配,转至 Attribute Editor 的 Dependencies 页面,确保 Salary 属性位于 Available 列表中,如果没有,则单击 Add(右箭头)按钮转其移至 Selected 列表中。

确保 CommissionPct 也位于 Selected 一侧。

最后,单击 OK 保存更改并保存您的所有工作。

4.

在 Application Navigator 中,双击 EmpView。在编辑器中,选择 Attributes 选项卡,单击 Add from Entity... 按钮将 TotalComp 移至 Selected 一侧。

5.

要测试您的更改,右键单击 Application Navigator 中的 AppModule 应用程序模块并从出现的菜单中选择 Run

6.

Business Components Browser - Connect 对话框出现后,单击 Connect。双击 EmpView1 对象实例,前进至一个包含佣金百分比的记录并查看计算结果。如果您要更改佣金百分比,当您导航到测试器中的任何其他项时总报酬也变化了。

关闭 Business Component Browser。

返回主题

返回主题列表

验证外键

前面的部分介绍了如何为视图对象属性定义声明式值列表 (LOV) 以帮助用户选择现有的外键查找值。请记住,尽管这些 LOV 对于终端用户非常有用,但它们不能代替在实体对象级对外键进行适当的验证。例如,某些 UI 组件(如带弹出式 LOV 的文本域)允许用户直接键入外键值。而且,可以使用多种方法访问服务,其中一些方法可以跳过常规的用户界面。幸运的是,新的 Key Exists 验证规则简化了外键属性的验证,使得通常要编程完成的繁杂事项可快速完成。

1.

下一个示例将 Key Exists 验证规则添加到 Model 项目中的 Emp 实体。

在 Application Navigator 中,双击 Emp 实体在编辑器中打开它。选择 Validators 选项卡,选择 Entity 节点,然后单击页面上 Validators 标题右边的 Add

2.

Add Validation Rule 对话框中,从 Rule Types 列表中选择 Key Exists。在 Rule Definition 选项卡中,从 Association Name 列表中选择 EmpDeptFkAssoc。这一选择表示 Dept 和 Emp 实体对象间一对多的关联,这表示要验证的外键关系。

3.

接下来,在 Failure Handling 选项卡的 Message Text 框中输入错误消息 Department does not exist

最后,单击 OK 定义新的验证规则。验证出现在编辑器中。

保存您的所有工作。

4.

将 LOV 从您之前创建的 EmpVIew 中删除。

在编辑器中调用 EmpView 视图对象,在 Attributes 选项卡中,双击 DepartmentId,选择 List of Values 选项卡,然后取消选中 Enable List of Values 复选框。

保存您的所有工作。

5.

再次运行 AppModule,将现有员工的 DepartmentId 的值更改为任意两位有效数字(如 99)。当您提交或导航到不同的行时,将出现包含您定义的错误消息的异常。

返回主题

返回主题列表

约束依赖值

另一种常见的验证涉及对同一行的两个属性进行比较。下一个示例将实施一个要求员工佣金必须低于 50% 的规则。只有当佣金和工资都为非空的情况下才会应用这一规则,当佣金或工资变动时,将重新计算它。Oracle JDeveloper 11g 中这一增强的比较验证规则使得检查易于实施。

1.

在 Application Navigator 中,双击 Emp 实体在编辑器中打开它。选择 Validators 选项卡,选择 Entity 节点,然后单击页面上 Validators 标题右边的 Add

在 Add Validation Rule 对话框中,从 Rule Types 列表中选择 Compare

2.

Rule Definition 选项卡中,从 Attribute 列表中选择 CommissionPct,从 Operator 列表中选择 LessThan。从 Compare With 列表中选择 Literal Value,在下面的 Literal Value 框中输入 .5

3.

这些步骤设置了验证规则中的基本比较。接下来,在 Validation Execution 选项卡的 Conditional Execution Expression 域中输入公式
Salary!=null && CommissionPct!=null

。这个域将导致只有在指定条件为真时才应用该规则。注意,表达式区分大小,所以确保输入的是 CommissionPct 而不是 commissionpct。
接下来,转至 Triggering Attributes 部分,从 Available Attributes 列表中选择 Salary,然后单击 Add  按钮将 SalaryCommissionPct 移至 Selected Attribute 列表中。在运行时,如果该列表中的任何属性值发生变化,将重新计算规则。

4.

最后,转至 Failure Handling 选项卡,在 Message Text 框中输入以下验证错误消息:

The {attr1} of {val} must be less than 50%

一定要将两个消息表达式包括在大括号中。

5.

在下面的 Error Message Expressions 表中,单击 attr1 标记所在的行,并双击该行中的 Expression 单元格。输入 source.hints.CommissionPct.label 表达式,以引用正在验证的源实体对象的 CommissionPct 属性的用户友好的显示标签的值。

同样的,为 val 标记输入 CommissionPct 表达式以引用 CommissionPct 属性的值。

这些消息表达式与在上面经计算的属性示例中那些表达式一样,使用 Groovy 语法。尽管这些是非常简单的表达式,但开发人员可以在必要时充分利用 Groovy 的强大功能,认识到这一点很重要。最后,单击 OK 定义新规则。

单击 OK 保存您的验证规则。保存您的所有工作。

6.

再次运行 AppModule 以测试规则。尝试为某个现有员工的佣金输入值 .7 。提交后,将显示参数化的错误消息“ The CommissionPct of .7 must be less than 50%”。

如果您更改没有佣金的员工的工资值,您会发现不会引发异常,因为 CommissionPct 值为空。最后,您可以通过将员工工资更改为低于该人员的现有佣金的值,来验证触发属性值是否正常工作。

返回主题

返回主题列表

编写 Groovy 验证规则

在本部分中,您将使用 Groovy 语言创建更复杂的验证规则。该规则指明,如果一个员工属于名称以字母 s 结尾的部门,工资必须为 5 的倍数。该规则要求条件逻辑并且访问相关联的 Dept 实体对象的属性。

1.

在本部分中,您将创建一个引用来自 Dept 实体对象的值的验证。要完成此任务,您需要使用 Emp 和 Dept 实体对象间关联的访问器。在创建表达式前,您需要了解访问器的名称。

在 Application Navigator 中,双击 EmpDeptFkAssoc,然后选择 Relationship 选项卡。展开 Accessors 的加号。在本示例中,访问器的名称为 Dept1,稍后将在 groovy 表达式中使用这一名称。如果您的名称不同,没问题,请将它记下来,在将代码更改为使用它而不是示例代码中的 Dept1

2.

EmpEntity Object Editor 中,选择 Validators 选项卡,然后选择 Entity 节点并再次单击 Create new validator 按钮。

在 Add Validation Rule 对话框中,单击 Rule Types 列表,向下滚动选择 Script Expression

3.

在 Rule Definition 选项卡中,输入以下表达式:

if (Dept1?.DepartmentName?.toUpperCase()?.endsWith("S")
&& Salary % 5 != 0) {
return false;
}
return true;

if 语句中的布尔表达式引用了当前要验证的 Emp 对象的 DepartmentId,以访问相关联的 Dept 实体对象(如果存在)。在本例中,员工部门关联的默认名称为 Dept1。如果您在 Accessor 部分查看 EmpDeptFkAssoc 对象的定义,就会看到该名称。通常,您应当对您的所有关联名称进行更改以表示其业务(如 EmpWorkingInDept)。在本 OBE 中,我们使用了所有对象的默认名称。

然后,它引用在 Dept1 关联结尾处发现的 DepartmentName 属性,将其转换成大写形式以进行区分大小写的比较,并使用 String 类的 endsWith() 方法测试 DepartmentName 值是否以 s 结尾。

如果您的访问器的名称(第 1 步)与 Dept1 不同,在 Dept1 所在的第一行完成该名称的替换。

注意,我们已将普通的点操作符替换为 Groovy 的“?.”安全导航操作符,而不是编写为 Dept1.DepartmentName.toUpperCase().endsWith()。该操作符与点操作符的作用相同,允许从对象导航到该对象的属性。

但是,如果左侧的值为空,Groovy 操作符不会抛出 NullPointerException,而是值为空。为方便起见,在 Groovy 中碰到为空的布尔值时,值为假,因此使用 ?. 操作符可以让众多表达式变得更紧凑。初步检查后,上面的表达式使用整型求模操作符 (%) 测试工资是否为 5 的倍数。

如果部门名称以 s 结尾且工资不是 5 的倍数,将返回假,导致规则失败。否则,返回真。

4.

接下来,转至 Failure Handling 选项卡。

注意,因为 Groovy 验证规则可以根据条件引发几个异常中的一个,您可以在该选项卡中添加多条错误消息。当验证规则返回假的时候,将使用您选择的消息。

要添加消息,单击 Existing Message 按钮(用放大镜表示)。

Select Text Resource 对话框显示时,单击 New....

在 Create Text Resource 对话框中,在 Key 域中输入以下值:

MultipleOfFiveSalForDeptsEndingInSMessage

在 Value 域中输入以下错误消息:

If department name ends in S the salary must be multiple of five.

然后单击 Save and Select,最后单击 OK 定义新的验证规则。

保存您的所有工作。

5.

在 EmpView 对象中,重新设置 LOV。

选择 DepartmentId 属性,然后选择 Enable List of Values 复选框。展开 DeptView1 节点,选择其 DepartmentId 属性。注意, List Return Values 部分进行了更新,它显示用户在列表中进行选择时,列表数据源中的属性如何分配给基础视图对象中的属性。

在离开 List of Values 对话框前,单击 UI Hints 选项卡打开 UI Hints 对话框。这些设置提供了定义列表在用户界面中的显示方式的信息。注意,Default List Type 指明了 Choice List 显示类型。在这个简单示例中,您将使用这一默认列表类型,但是如果您单击列表,您将看到您可以在自己的应用程序中使用的其他列表控件类型。

在 Display Attributes 部分中,从 Available 列表中选择 DepartmentName 属性,单击 Add(右箭头)  按钮将其添加到所选属性列表。该选择表示您希望用户在列表中看到部门名称,而不是部门编号。最后,单击 OK 关闭 UI Hints 对话框,然后再次单击 OK 关闭 List of Values 对话框。

6.

再次运行 AppModule,尝试为部门 30 (SALES) 或 40 (OPERATIONS) 的员工输入以“ 1”结尾的工资。然后提交更改。因为这些部门名称以 s 结尾且员工工资不是 5 的倍数,应用程序将产生一个验证错误。

返回主题

返回主题列表

创建一个命名查询

在本部分中,您将创建一个命名查询。

您定义的命名查询允许您指定视图对象集合的行的筛选信息。命名查询对象是一个包含一个或多个命名查询行的行集,其属性是视图对象中的那些对应属性的镜像。命名查询定义包含添加目标视图对象的 WHERE 子句的查询条件。您指定的查询条件应用于目标视图对象的单个属性上。

查询结果中视图对象行与命名查询行的关键区别是视图条件行中每个属性的数据类型为 String。这一关键差别支持按示例查询操作符,因此允许用户输入“OrderId > 304”之类的条件。

1.

EmpView1 视图需要一个命名查询筛选条件,用于查找特定部门编号的员工。

双击 EmpView1 视图对象,选择 Query 选项卡。向下滚动,按下 View Criteria 部分旁的绿色加号。

2.

Create View Criteria 中,将名称更改为 EmployeesByDepartment,然后按 Add Item 按钮。

选择 Empno 项。在 Criteria Item 部分中,将 Attribute 设置为 Deptno,将 Operator 设置为等号,将 Operand 设置为 Bind Variable。然后,按参数属性旁边的 New 按钮以指定绑定变量。

3.

在 Bind Variable 窗口中,将名称更改为 DepartmentNumber 并将 Type 设置为 Number。按 OK 创建绑定变量。

4.

最后,在 Options 部分中,将 Usage 设置为 Required

5.

注意,已为您创建了绑定变量定义,显示在 Query 选项卡上。在服务创建过程中将使用命名查询。完成的命名查询应如下图所示。

单击 OK 保存您的所有工作。

6.

测试命名查询。在测试器中运行测试应用程序模块。

调用测试器后,双击 EmpView1 节点。在数据窗格中,按 View Critera 按钮(右起第二个按钮)

EmployeesByDepartment 命名条件移至 Selected 一侧。

Find 按钮。

在页面底部,为 Value 属性输入一个数字(如 70),然后单击 OK。返回至测试器的记录只反映那些大于或等于绑定变量属性中所输入值的值。

返回主题

返回主题列表

详细了解 JavaServer Faces 页面中的业务组件特性

现在您已经在 EmpView 视图对象中配置并测试了业务组件特性,现在让我们看一下在使用 JavaServer Faces (JSF) 的支持 Ajax 的 Web 页面上使用它们是如何简单。

1.

在 Application Navigator 中,展开 ViewController 项目及其 Web Content 文件夹,显示项目的 Page Flows 文件夹。在 WEB-INF 文件夹内,双击 adfc-config 节点打开页面流程图。

2.

接下来,转至 Component 面板,找到 Activities 部分。在本部分中,将 View 组件拖放至页面流程图上。当新视图出现在图上时,重命名 Employees 组件并单击 Enter

要为本视图创建 JSF 页面,双击表示新视图的图标。当 Create JSF JSP 对话框出现后,单击 OK 使用默认设置创建 Employees.jspx 页面。新的 Web 页面出现在可视化页面设计器中。

3.

下一步是将数据集合拖放至页面上。首先,浏览 Application Navigator,注意框架分为几个部分,每个包含带标题的标题栏和箭头,您可以使用该箭头展开或折叠各部分的内容。

Application Navigator 的 Projects 部分下方是 Data Controls 部分。展开该部分,然后展开 AppModuleDataControl 以展示它包含的 EmpView1 和 DeptView1 数据集合。

EmpView1 数据集合拖放到可视化 JSF 页面编辑器的中心。

4.

在 Create 菜单上,选择 Forms -> ADF Form 创建一个可编辑的表单,显示 EmpView1 数据。

在出现的 Edit Form Fields 对话框中,注意 Mgr 和 Deptno 属性的 Component To Use 值已设置为 ADF Select One Choice。作为您先前为这两个属性定义值列表时配置的 List Type UI 提示的结果,默认情况下 Oracle JDeveloper 选择这些 UI 组件值。

选择 Include Navigation Controls 复选框,单击 OK 创建表单。注意如您所预料,Mgr 和 Deptno 域显示为列表。

保存您的所有工作。

5.

在编辑器中,页面看起来应与此类似。

现在,我们将运行该页面。右键单击 Application Navigator 中的 Employees.jspx 页,然后选择 Run

6.

Oracle JDeveloper 将启动内嵌的 Oracle Containers for J2EE (OC4J) 应用服务器,并在您的默认浏览器中打开此页面。假设您使用的是 Internet Explorer 7.0 或 Mozilla Firefox 2.0.0.3 或更高版本,您将看到一个类似于以下的页面。

浏览各记录并试用 Manager Id 的值列表。

查找工作于以“S”结尾的部门(Sales - 30 或 Operations - 40)的员工 (Sales - 30 or Operations - 40)。为 Salary 输入一个以 1 结尾的值,并提交该记录以查看错误。

返回主题

返回主题列表

总结

在本教程中,您看到了 JDeveloper 11g 的一些特性。

您已学会了如何

构建值级联列表

增强计算和验证

创建一个命名查询

详细了解 JavaServer Faces 页面中的业务组件特性

 将鼠标置于该图标上可以隐藏所有的屏幕截图。