迁移具有 Faces Client 组件的 JavaServer Faces 资源

如果在 WebSphere® Studio V5.1.x 中创建了 JavaServer Faces JavaServer Pages(JSP)中包含 Faces Client 组件的项目,则必须将 Faces Client 组件的运行时资源迁移到最新级别。

在 V6.0 中打开了在 WebSphere Studio V5.1.x 中创建的包含具有 Faces Client 组件的 JavaServer Faces JSP 的项目之后,必须执行下列操作来迁移 Faces Client 组件的运行时资源:
  1. 创建一个新的 JSP 文件,并且对于模型,选择基本,带有客户机端数据高速缓存。只是临时需要此 JSP 以使 Rational® Application Developer 将所有系统 Java™ 归档(JAR)文件迁移到最新级别。
  2. 系统将提示您可以将项目运行时资源迁移到最新级别。选择以完成迁移过程。要点:如果选择,或者取消该对话框,将不会把项目的 Faces Client 组件迁移到最新级别并且不会再次提示您,从而导致在新的工具与旧的运行时 JAR 文件之间产生一些严重问题。
  3. 在创建了新的 JSP 文件之后,就可以从项目中删除它。
  4. 选择“客户机数据”区域中的任何数据对象,右键单击并选择配置。在高级选项卡上,选择全部重新生成,这将重新生成所有介体。
    注: 一定不要使用从服务器端数据重新生成按钮。一定要使用全部重新生成
  5. V5.12 中的某些 WebSphere 数据对象(WDO)模式元素在 V6.0 中不再使用。将不会重新生成这些元素的介体类并且会继续产生编译错误。这些介体的命名约定为 *_DataGraphSchema_wdo4js_*.java。从项目中删除这些介体类以防止发生这些编译错误。
如果正在 Linux™ 平台中工作,或者如果您正在使用非英语的语言环境:在 WebSphere Studio V5.1.x 中,创建了 JavaServer Faces JSP 中包含 Faces Client 组件的项目,在遵循上面描述的各步骤迁移该项目之前,将这些项目装入到 V6.0 中时可能会产生下列错误消息:
由于不能读取 <class_name>.java,所以不能构建项目。
不能读取这些文件,原因是 V5.1.x 项目中的“客户机数据”介体类包含一些未进行编码的特殊字符,而 Rational Application Developer V6.0 中的介体类会对这些字符进行编码。一旦遵循上面描述的步骤重新生成了“客户机数据”,就不会再产生这些错误消息了。但是,在遵循这些步骤来迁移包含 Faces Client 组件的项目之前,首先必须从装入到 V6.0 中的项目中删除“客户机数据”介体文件以便可以构建工作空间。要删除“客户机数据”介体文件:
  1. 从项目中删除命名约定为 com.ibm.dynwdo4jsmediators.<client-data- name> 的所有“客户机数据”介体类包。
  2. “一定不要”删除名为 com.ibm.dynwdo4jsmediators 的包。此包包含项目中“客户机数据”的元数据(ecore 和 emap 文件),它们将用来重新生成介体。
  3. 在删除了介体包之后,现在就可以构建项目了。现在可以完成上面描述的迁移步骤。

在某些情况下,可能会产生生成介体失败消息。要更正此问题,编辑 OdysseyBrowserFramework.properties 文件,删除 EMAP_FILES 和 ECORE_FILES 属性的条目,然后再试。

注: 当将包含 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 文件中,对于项目中包含 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. 对项目中包含“客户机数据”的每个 JSP 重复这些步骤。

    在为项目中的 JSP 重新生成了“客户机数据”介体类之后,仍然存在一些不会编译的介体类。存在一些在 V6.0 中的“服务数据对象”(SDO)中不再使用的模式元素的介体。这些介体的命名约定为 *_DataGraphSchema_wdo4js_*.java 和 *_RootDataObject_wdo4js_*.java。从项目中删除这些介体类以防止发生这些编译错误。

    在成功完成迁移之后,恢复 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. 生成新的差别处理程序和处理器。为此,对项目中的每个“客户机数据对象”,必须执行下列操作:
    1. 选择“客户机数据对象”,右键单击并选择配置
    2. 高级选项卡上,选择全部重新生成
  2. 除去为调用差别处理器和处理程序而编写的代码,原因是会自动调用生成的处理器和处理程序。以前,使用此代码的典型示例是用于“命令按钮”组件的“命令”事件。下面是一个代码内容的示例:
    String Diff = getClientData1().getDiffStr();
    if (DiffProcessor.Synch(getRoot(), Diff) == true)
     return "";
    return "failure";
  3. 从项目中除去对应于您创建的旧的定制处理程序和处理器的文件。
保留为 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
相关任务
迁移 Web 项目中的 JavaServer Faces 资源
迁移 portlet 项目中的 Faces 资源
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.