更新 Web 项目中的 Faces Client 运行时资源

已经对 Rational® Web Developer V6.0.1 更新了 WebSphere® Studio Site Developer V5.1.x 中最初提供的 JavaServer Faces Client 运行时资源。如果想要继续在使用此先前产品版本创建的 Web 项目上进行开发,建议您将 Faces Client 运行时资源更新为最新级别。

Rational Web Developer V6.0.1 中,当导入 Web 项目或者打开包含过时资源的工作空间时,就会自动更新 Faces Client 运行时资源。在 Rational Web Developer V6.0.1 中,导入来自 WebSphere Studio Site Developer V5.1.x 的 Web 项目或者打开来自 V5.1.x 的工作空间之后,将提示您将 Faces Client 运行时资源更新为最新级别。

自动更新运行时资源

自动更新 Web 项目的 Faces Client 运行时资源:
  1. 导入一个包含来自于 WebSphere Studio Site Developer V5.1.x 的 Faces Client 内容的 Web 项目(或工作空间)。“项目迁移”窗口将打开。
    注: 如果“项目迁移”窗口未打开,则可能已经禁用了自动构建首选项设置。在“项目资源管理器”中,右键单击 Web 项目并选择构建 > 项目;重建项目的过程将打开“项目迁移”窗口。
  2. 如果工作空间中具有其它包含 Faces Client 内容的 Web 项目,则选择将此选项应用于需要升级的其它任何项目,就会更新所有 Web 项目。
  3. 单击下列其中一项:
    • 单击以自动完成更新。
    • 单击稍后以延迟更新。要在选择稍后之后自动更新运行时资源,您必须先关闭然后重新打开 Web 项目,或者在重建 Web 项目之前重新启动工作台。如果已经禁用了自动构建,则右键单击 Web 项目并选择构建项目
    • 单击从不以保持运行时资源后备级别。如果您选择从不并且有意保持后备级别运行时资源,则将不会再次提示您更新它们。如果您将来需要这些运行时资源,则需要手工更新它们。
  4. 从 Web 项目中的 Java 资源 > JavaSource 文件夹中,删除命名约定为 com.ibm.dynwdo4jsmediators.<client-data-name> 的所有客户机数据介体类包。不要删除名为 com.ibm.dynwdo4jsmediators 的包。此包包含项目中客户机数据的元数据(ecore 和 emap 文件),它们将用来重新生成介体。
  5. 从 Web 项目中的 Java 资源 > JavaSource 文件夹中,打开 OdysseyBrowserFramework.properties 文件并删除 EMAP_FILESECORE_FILES 的条目。
  6. 对于“客户机数据”视图中的每个数据对象:
    1. 右键单击并选择配置
    2. 高级选项卡上,单击从服务器端的数据重新生成以便为数据对象重新生成所有介体。

手工更新运行时资源

手工更新 Web 项目的 Faces Client 运行时资源:
  1. 完成更新 Web 项目中的 Faces 运行时资源中的手工更新运行时资源步骤。
  2. 完成上面的自动更新运行时资源这一节中的步骤 4 到步骤 6。

当将包含 Faces Client 组件的项目的目标服务器从 WebSphere Application Server V5.1 更改为 V6.0 时可能会产生问题。

当将包含 Faces Client 组件的项目的目标服务器从 WebSphere Application Server V5.1 更改为 V6.0 时可能会产生两个问题:
  • 将不再编译已经生成的客户机数据介体类。需要重新生成它们,一次一个 JSP。
    1. 打开根 Java™ 源文件夹中的 OdysseyBrowserFramework.properties 文件。保存内容以供将来使用。
    2. 在 OdysseyBrowserFramework.properties 文件中,对于 Web 项目中包含 Faces 客户机数据的每个 JSP,查找 EMAP_FILES 和 ECORE_FILES 属性的 <client-data-name>.ecore 和 <client-data-name>.emap 条目。
    3. 只保留与 JSP 上的客户机数据相匹配的条目,删除所有其它条目。
      例如,当前页面具有称为 ACCOUNT 的“客户机数据”,而属性文件具有类似如下的条目:
      EMAP_FILES=com\\ibm\\dynwdo4jsmediators/account.emap com\\ibm\\dynwdo4jsmediators/orders.emap
      应从该条目中删除 com\\ibm\\dynwdo4jsmediators/orders.emap。现在,该条目的内容如下:
      EMAP_FILES=com\\ibm\\dynwdo4jsmediators/account.emap
    4. 保存该属性文件。
    5. 在 JSP 中选择客户机数据对象,然后单击右键并选择配置
    6. 高级选项卡上,单击全部重新生成。这将重新生成当前 JSP 上的所有客户机数据所需的所有工件。
    7. 对 Web 项目中包含客户机数据的每个 JSP 重复步骤 2 到步骤 6。
    8. 在重新生成客户机数据介体类之后,仍然存在一些不会编译的介体类。这些是 V6.x 中的“服务数据对象”(SDO)中不再使用的模式元素的介体,并且这些介体的命名约束为 *_DataGraphSchema_wdo4js_*.java 和 *_RootDataObject_wdo4js_*.java。从 Web 项目中删除这些介体类以防止发生这些编译错误。
    9. 在成功完成更新之后,恢复 OdysseyBrowserFramework.properties 文件的原始内容。
  • 在将项目的目标服务器更改为 WebSphere Application Server V6.0 之后,绑定至 WDO 的树形视图 Faces Client 组件无法在服务器上运行。变通方法是修改 JSP 的“源代码”视图以将所有 className 标记更改为使用 SDO DataObject 类而不是使用 WDO DataObject 类。例如,对于名为 account 的 WDO:
    1. 对于根对象,将 className 标记从 className="com.ibm.etools.wdo.DataObject(DynWDO`account`RootDataObject)" 更改为 className="commonj.sdo.DataObject(DynWDO`account`DataGraphRoot)"
    2. 对于所有子节点,将 className 标记从 className="com.ibm.etools.wdo.DataObject(DynWDO`account`ACCOUNT)" 更改为 className="commonj.sdo.DataObject(DynWDO`account`ACCOUNT)",其中 ACCOUNT 是数据节点的名称。

升级到自动差别处理程序和处理器

现在会自动生成差别处理器和处理程序。如果在 WebSphere Studio V5.1.x 中为 Faces Client 组件编写了差别处理程序和处理器,则建议您废弃该代码并使用自动生成的处理器和处理程序:
  1. 对 Web 项目中每个客户机数据对象生成新的差别处理程序和处理器。
    1. 选择客户机数据对象,右键单击并选择配置
    2. 高级选项卡上,单击全部重新生成
  2. 除去为调用差别处理器和处理程序而编写的代码,原因是会自动调用生成的处理器和处理程序。以前,使用此代码的典型示例是用于“命令按钮”组件的“命令”事件,如下所示:
    String Diff = getClientData1().getDiffStr();
    if (DiffProcessor.Synch(getRoot(), Diff) == true)
     return "";
    return "failure";
  3. 从 Web 项目中除去与您创建的旧的定制处理程序和处理器对应的文件。

保留为 V5.1.x 编写的定制差别处理程序和处理器

虽然建议不要这么做,但是如果您决定需要保留来自 V5.1.x 的定制差别处理程序和处理器,则需要对它们进行修改才能在 V6.0 中工作,这是因为 DiffHandler 接口和 DiffInfo 类已经更改。
  • DiffHandler 接口已按如下所示进行了更改:
    • handle 方法现在除了抛出 DiffException 之外还抛出 Exception。
    • 框架使用新的 find 方法来查找对象。
    • 新的 getId 方法用于调试并允许框架打印对象的值。

    find 和 getId 方法由生成的 DiffHandler 内部使用。对于定制 DiffHandler,可以实现空的方法,只是为了与接口兼容。框架将不会调用那些方法。

    现在,DiffHandler 接口内容如下:
    public interface DiffHandler
     {
       public void   handle(DiffInfo Diff) throws DiffException, Exception;
       public Object find  (DiffInfo Diff) throws DiffException, Exception;
       public String getId (DiffInfo Diff, boolean Original);
     }
  • DiffInfo 类已按如下所示进行了更改:
    • ArrayList getAncestors() 方法已被 DiffInfo getParent() 方法替换,后者提供了一种简便的方法来以递归方式访问祖先树中的每个对象的信息。
    • getCurrent() 和 getOriginal() 方法现在返回 DataObject 对象而不是 EObject 对象。这不是必需的,可以更改代码以使用 DataObject 对象。但是,DataObject 接口比 EObject 接口易于使用并且更直观。可以轻松地将现有代码从 DataObject 对象强制类型转换为 EObject 对象。
    • 已添加了一个新的方法 String getPropertyName() 来标识适用于此对象的属性名。例如,如果给定类具有类型相同的两个属性,标识属性名就非常重要了。以前在 DiffInfo 类中,代码可能不能区分这两个属性。
    现在,DiffInfo 类的内容如下:
    public class DiffInfo
     {
       public char       getCrud()
       public DataObject getCurrent()
       public String     getEClassName()
       public DataObject getOriginal()
       public String     getPropertyName()
       public DiffInfo   getParent()
     }
    注: 不再支持广泛使用 DiffInfo 类,原因是现在会自动生成差别处理器和处理程序。保留旧的处理程序只是一个临时解决方案,强烈建议使用自动生成的处理程序。
在 V6.0 中对 Faces Client 组件的更改
  • 支持 WebSphere Application Server V6.0。
  • 支持 WebSphere Application Server V6.0 上的“服务数据对象”(SDO)。
  • 现在支持将 EGL 数据用作客户机数据。
  • 自动生成差别处理器和处理程序。
  • 存在下列组件的新事件:
    • TabbedPanel:onInitialPageShow
    • Tree:onNodeExpand、onNodeCollapse、onExpand 和 onCollapse
    • DataGrid:onPage、onSort 和 onFilter
相关任务
更新 Rational Web Developer V6.0 中 Web 项目的 Faces 运行时资源
更新 Web 项目中的 Faces 运行时资源
反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.