现在,Rational Developer V6.0.0.1 使得创建多页面 SDO 应用程序更加容易。
下例说明了 Rational Developer 中的新功能如何帮助创建多页面 SDO 应用程序。这些功能在 Rational 开发软件平台中与 Relational、SAP、Siebel 和 PeopleSoft SDO 工具一起使用。请注意,现在“快速编辑/片段”菜单中有新的项(查找子记录/记录列表和创建子记录),并且可以使用“SDO 创建”向导将 SDO 对象从已知限定作用域中拉出。
下例使用 DB2 8.2 样本数据库。在此示例中,将创建一组 Web 页面,它们更新并管理数据库中某部门及其职员信息。一个页面(updateDepartment.jsp)将充当主更新页面,并且将包含更新部门名称、经理编号、管理部门和位置的字段。该页面还将显示部门中的职员列表。然后,将创建第二个页面(createEmployee.jsp),它将更新添加到此部门中的新职员的详细信息。此示例与您见到的其它示例不同,因为 CreateEmployee 页面不是将新职员记录直接放入到数据库的页面。仅当提交 updateDepartment 页面时,才会将创建的新职员添加到数据库中。
要开始,首先创建一个动态 web 项目,其 Web 版本为 2.4 并将 WebSphere Application Server V6 作为目标。然后,创建两个 faces JSP(updateDepartment.jsp 和 createEmployee.jsp)。最后,在 Page Designer 中打开 updateDepartment.jsp 并完成下列步骤:
- 从“页数据”视图中,创建新的“关系记录”。
- 输入部门名称。确保选择了“填写 .. 记录”选项。
- 创建或选择与数据库的连接。
- 在表列表中,选择 DEPARTMENT,然后转至下一页。
- 选择“通过关系添加另一个表”
- 在向导中,选择“创建新关系”。
- 选择 EMPLOYEE 表,然后转至下一页。
- 选择 EMPNO 作为主键。
- 选择“1 - * 主键到外键”作为多重性。
- 选择列 WORKDEPT 作为外键列。
- 选择“完成”。
- 验证树形视图(如下所示)现在是否显示名称为 DEPARTMENT_EMPLOYEE 的“关系”节点。
- 取消选择 EMPLOYEE 表中除 EMPNO、FIRSTNME、MIDINIT、LASTNAME、WORKDEPT 和 EDLEVEL 之外的所有列。
- 完成“添加关系记录”向导。
- 接下来,将关系记录拖放到页面上。
- 选择“更新现有记录”,然后单击“完成”以在 JSP 页面上生成表单。然后,保存 JSP。
- 右键单击“设计”视图并选择“编辑页代码”。缺省情况下,将显示一个 Java 文件,它包含 JSF 页面的服务器代码。验证是否创建了 getDepartment() 和 getDepartmentMediator() 方法。
- 用以下方法替换 getDepartment() 方法:
public DataObject getDepartment() {
if (department == null) {
if(!getSessionScope().containsKey("department")){
doDepartmentFetchAction();
getSessionScope().put("department", department);
} else
department = (DataObject) getSessionScope().get("department");
}
return department;
}
- 保存 Java 文件。
- 切换至 JSP。将“命令 - 超链接”拖放到“删除”按钮旁边。调用链接“添加职员”。
- 对“命令 - 超链接”激活“快速编辑”视图(QEV),然后选择“命令”事件。
- 右键单击事件处理程序,然后选择“插入片段”->“创建子记录”(如下所示)
- 选择 EMPLOYEE 节点。然后在“变量名”字段中输入职员,并从“变量限定作用域”下拉列表中选择“会话”。
- 验证 QEV 中是否插入了下列代码:
//actionBegin: wdo.createsub.record
DataObject employeeListParent = getRootDataObject(getDepartment()).getDataObject("DEPARTMENT[1]");
DataObject employeeList = getRootDataObject(getDepartment()).createDataObject(" EMPLOYEE");
employeeListParent.getList("DEPARTMENT_EMPLOYEE").add(employeeList);
getSessionScope().put("employeeList", employeeList);
//actionEnd: wdo.createsub.record
- 添加导航规则以转至 createEmployee.jsp。(有关创建导航规则的信息,参阅将导航规则与 Faces JSP 页配合使用。)然后,保存 JSP。
- 从“数据”类别下面的选用板中,选择“关系记录”(如下所示),然后在“名称”字段中输入职员名称。
- 选择“从限定作用域中检索现有记录或记录列表”选项。请注意已选择“复用元数据定义..”选项。
- 单击“浏览”按钮并选择先前创建的 SDO 元数据文件(如 department.xml)。请注意已禁用“创建记录”选项。然后选择“更新记录”选项。
- 选择“下一步”以转至下一页,并选择节点 DEPARTMENT_EMPLOYEE。然后选择“完成”。
- 验证“页数据”视图是否显示 EMPLOYEE 表的关系记录,并验证页面上是否生成一个更新 EMPLOYEE 表的表单。
- 单击“更新”按钮,激活 QEV,然后选择“命令”事件。
- 添加导航规则以返回到 updateDepartment.jsp。然后,保存 JSP。
- 选择“项目导航器”视图中的 JSP updateDepartment.jsp,并选择“在服务器上运行”。
- 选择 WebSphere V6 服务器。这将启动浏览器并显示该页。如果未对数据对象设置条件,将不会显示记录。如果这样,通过在表中追加与 DEPTNO 对应的 ?DEPTNO=XXXXX(如 DEPTNO=E01)来在浏览器编辑 URL。
- 按 Enter 键以查看 DEPARTMENT 数据对象和任何相应的数据。
- 单击“添加职员”链接。该链接将在 createEmployee.jsp 中打开一个表单,可以在该表单中输入职员。选择“提交”。这将返回到 updateDepartment.jsp。请注意,DEPARTMENT 包含已添加的新职员。
- 再添加几个职员,然后在 updateDepartment.jsp 中提交以更新/添加数据库中的 DEPARTMENT 及其新职员。
- 在 Project Explorer 视图的“数据库服务器”节点下找到 EMPLOYEE 表,然后右键单击并选择“样本内容”。“数据库输出”视图打开。验证您添加的职员是否在数据库中。