移轉含 Faces 用戶端元件的 JavaServer Faces 資源

如果您在 WebSphere® Studio 5.1.x 版中,建立了在 JavaServer Faces JavaServer Pages (JSPs) 中包含 Faces 用戶端元件的專案, 您必須將 Faces 用戶端元件的執行時期資源移轉至最新的層次。

在 6.0 版中開啟了包含 JavaServer Faces JSP 的專案之後,如果這些 JSP 含有在 WebSphere Studio 5.1.x 版中建立的 Faces 用戶端元件,您必須執行下列動作來移轉 Faces 用戶端元件的執行時期資源:
  1. 建立新的 JSP 檔,針對模型選取含用戶端資料快取的基本作業。這個 JSP 只是暫時需要,以便將 Rational® Application Developer 將所有系統 Java™ 保存檔 (JAR) 移轉至最新的層次。
  2. 系統會提示您可以將專案執行時期資源移轉至最新的層次。 請選取來完成移轉程序。 重要事項:如果您選取,或取消對話框,專案的 Faces 用戶端元件就不會移轉至最新的層次,您也不會再收到提示, 這會在新的工具和舊的執行時期 JAR 檔之間,造成若干嚴重問題。
  3. 建立好新的 JSP 檔之後,您可以從專案中刪除它。
  4. 在用戶端資料區中選取任何資料物件,再按一下滑鼠右鍵,選取配置。 在進階標籤中選取全部重新產生,這會重新產生所有調解者。
    註: 使用從伺服器端資料重新產生按鈕。您必須使用全部重新產生
  5. 6.0 版已不再使用 5.12 版中的若干 WebSphere 資料物件 (WDO) 綱目元素。 這些元素的調解者類別不會重新產生,且會持續出現編譯錯誤。 這些調解者的命名慣例是 *_DataGraphSchema_wdo4js_*.java。 請從專案中刪除這些調解者類別,以防止出現這些編譯錯誤。
如果您在 Linux™ 平台中作業或使用非英文的語言環境:在遵循上述步驟來移轉 WebSphere Studio 5.1.x 版所建立在 JavaServer Faces JSP 中含有 Faces 用戶端元件的專案之前, 當專案載入 6.0 版時,可能會出現下列錯誤訊息:
無法建置專案,因為無法讀取 <class_name>.java。
無法讀取這些檔案,可能是因為 5.1.x 版專案中的用戶端資料調解者類別含有未編碼的特殊字元,但 Rational Application Developer 6.0 版的調解者類別會編碼這些字元。 您遵循上述步驟來重新產生用戶端資料之後,就會停止出現這些錯誤訊息。不過,在遵循步驟來移轉包含 Faces 用戶端元件的專案之前,您必須先從 6.0 版所載入的專案中刪除用戶端資料調解者檔案,以便建置工作區。 如果要刪除用戶端資料調解者檔案,請執行下列動作:
  1. 從專案中刪除所有命名慣例為 com.ibm.dynwdo4jsmediators.<client-data- name> 的用戶端資料調解者類別套件。
  2. 請勿刪除名稱為 com.ibm.dynwdo4jsmediators 的套件。 這個套件會將用來重新產生調解者的 Meta 資料(ecore 和 emap 檔)包含在您的專案中。
  3. 刪除調解者套件之後,便會建置您的專案。 這時您可以完成上述的移轉步驟。

在某些情況下,可能會出現調解者產生失敗訊息。 如果要更正這個問題,請編輯 OdysseyBrowserFramework.properties 檔,刪除 EMAP_FILES 和 ECORE_FILES 內容的項目,再重試一次。

註: 將含有 Faces 用戶端元件之專案的目標伺服器從 WebSphere Application Server 5.1 版改成 6.0 版時,可能會發生問題。
將含有 Faces 用戶端元件之專案的目標伺服器從 WebSphere Application Server 5.1 版改成 6.0 版時,可能會發生兩個問題:
  • 不會再編譯已產生的用戶端資料調解者類別。 您必須每次一個 JSP 來重新產生它們。 執行的方式如下:
    1. 開啟在根 Java 來源資料夾中找到的 OdysseyBrowserFramework.properties 檔。 將內容儲存起來,供日後使用。
    2. 在 OdysseyBrowserFramework.properties 檔中,針對專案中每個包含 Faces Client 資料的 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 的用戶端資料調解者類別之後,仍有些調解者類別會保留未編譯狀態。 它們是 6.0 版服務資料物件 (SDO) 不再使用之綱目元素的調解者。 這些調解者的命名慣例是 *_DataGraphSchema_wdo4js_*.java 和 *_RootDataObject_wdo4js_*.java。 請從專案中刪除這些調解者類別,以防止出現這些編譯錯誤。

    移轉編譯順利完成之後,請還原 OdysseyBrowserFramework.properties 檔的原始內容。

  • 將專案的目標伺服器改成 WebSphere Application Server 6.0 版之後,無法在伺服器中執行連結於 WDO 的樹狀視圖 Faces 用戶端元件。
    這個問題的暫行解決方法是修改 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 是資料節點的名稱。
升級至自動化的 Diff 處理常式和處理器:現在,會自動產生 Diff 處理器和處理常式。 如果您原先在 WebSphere Studio 5.1.x 版中撰寫 Faces 用戶端元件的 Diff 處理常式和處理器,建議您捨棄這個程式碼,改用自動產生的處理器和處理常式。 如果要執行這項作業,您必須執行下列步驟:
  1. 產生新的 Diff 處理常式和處理器。 如果要執行這項作業,您必須在專案的每個用戶端資料物件上執行下列動作:
    1. 選取用戶端資料物件,按一下滑鼠右鍵來選取配置
    2. 進階標籤中,選取全部重新產生
  2. 移除您為了呼叫 Diff 處理器和處理常式而撰寫的程式碼,因為會自動呼叫產生的處理器和處理常式。 指令按鈕元件的指令事件是使用這個程式碼所在的典型範例。 程式碼看起來可能如下:
    String Diff = getClientData1().getDiffStr();
    if (DiffProcessor.Synch(getRoot(), Diff) == true)
     return "";
    return "failure";
  3. 從專案中移除您建立的舊自訂處理常式和處理器所對應的檔案。
保留為了 5.1.x 版而撰寫的自訂 Diff 處理常式和處理器:雖然不建議您這麼做,但如果您決定需要保留 5.1.x 版的 Diff 處理常式和處理器, 就必須修改它們,才能在 6.0 版中運作,因為 DiffHandler 介面和 DiffInfo 類別已有了改變。
  • DiffHandler 介面已改變如下:
    • handle 方法現在除了會擲出 DiffException,也會擲出 Exception。
    • 新的 find 方法供組織架構用來尋找物件。
    • 新的 getId 方法用來進行除錯,可讓組織架構列印物件的值。

    find 和 getId 方法是在內部供產生的 DiffHandler 使用。對於您的自訂 DiffHandlers,您可以只是為了符合介面規格而實作空的方法。 組織架構不會呼叫這些方法。

    現在,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 類別已改變如下:
    • DiffInfo getParent() 方法已取代了 ArrayList getAncestors() 方法,它提供一種較簡單的方法來依遞迴方式存取上代樹狀結構中各個物件的資訊。
    • getCurrent() 和 getOriginal() 方法現在會傳回 DataObject 物件,而不是 EObject 物件。您不一定要變更程式碼來使用 DataObject 物件。不過,相較於使用 EObject,DataObject 介面比較簡單,也比較符合直覺。 您可以輕易將 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 類別,因為現在會自動產生 Diff 處理器和處理常式。 保留舊的處理常式只是暫時的解決方案,強烈建議您使用自動化的處理常式。
6.0 版 Faces 用戶端元件的變更:
  • WebSphere Application Server 6.0 版的支援。
  • WebSphere Application Server 6.0 版服務資料物件 (SDO) 的支援。
  • 現在,支援用戶端資料使用 EGL 資料。
  • 會自動產生 Diff 處理器和處理常式。
  • 下列用戶端元件有新的事件:
    • 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.