对于库存管理系统的更新和插入部分,创建一个 form bean 和数据项页面,就像您通常所做的那样。随着一辆已修改或新的车辆的提交,需要使用已提交的 form bean 来创建 VehicleDocument ——库存管理服务的预期参数。
在该例中,我们不仅使用服务把新的车辆插入到数据库中,而且更新了用于显示数据的库存数组,这样就可以在不必从服务检索新的 VehicleListDocument 的情况下显示新的车辆。在实际的解决方案中,可以在每次更新之后重新进行检索,以确保库存列表保持最新。
更新库存
第一步是使用以前获得的 VehicleListDocument 来获得 VehicleListDocument.VehicleList ,并为它添加一个新的 VehicleDocument.Vehicle 。
VehicleDocument.Vehicle vehicle =
vehicleListDoc.getVehicleList().
addNewVehicle();
接下来,将联合使用 form bean 访问器方法和 XMLBean 访问器方法来设置 VehicleDocument.Vehicle 的属性:
private static final String
NEW_QUERY =
"declare namespace xq=
'http://example/schema'"
接下来需要构造查询部分。我们想构造一个可以检索状态为 new 的所有车辆元素的查询。 XPath 中的等价做法是:
vehicle.setMake(form.getMake());
vehicle.setModel(form.getModel());
vehicle.setYear(form.getYear());
vehicle.setPrice(form.getPrice());
vehicle.setVin(form.getVin());
vehicle.setStatus(
form.getStatus());
既然 XMLBean 包含来自表单的值,那么可以创建一个新的 VehicleDocument 实例,设置新创建的 VehicleDocument.Vehicle ,并调用服务的合适方法,把它传递给
VehicleDocument :
VehicleDocument vehicleDoc =
VehicleDocument.Factory.
newInstance();
vehicleDoc.setVehicle(vehicle);
vehicleInventory.insertVehicle(
vehicleDoc);
最后,更新用于显示的库存数组,因为我们刚刚给它添加了一辆新车:
inventory = vehicleListDoc.
getVehicleList().
getVehicleArray();
更新库存中的项目和插入它们的操作几乎相同。惟一的差别在于从库存数组获得了 VehicleDocument.Vehicle 对象,而不是给它添加一个这样的对象,因为我们准备修改一辆现有的车辆。 XPath 可以用于过滤显示在我们的库存管理系统中的结果。在我们的库存管理系统中,要探讨的最后一部分功能是基于车辆的状态过滤结果,状态的值是 new 或 used 。
第一步是构造一个 XPath 查询。我们将集中构造一个新车辆的查询,这由两个部分组成:一个名称空间声明和一个基于路径的查询。在该例中,参考原来的模式,可以看到我们的名称空间是 http://example/schema 。下面是查询的开始部分:
private static final String
NEW_QUERY =
"declare namespace xq=
'http://example/schema'"
