WebObjects/Direct-To/Web
Max Muller 撰寫了兩篇經常被提及的文章,它們是在幾年前寫成的。第一篇位於 Stepwise(或 Wonder 框架中):http://www.stepwise.com/Articles/Technical/D2W/D2W1.html
文章的第二部分僅在 Wonder 框架中可用
安裝完成後,您將在以下位置找到它:Wonder/Common/Examples/Stepwise/D2WInspectExample/Components/BestKeptSecret2.wo
最完整的概述仍然是 Apple 文件。
在《專業 WebObjects 5.0 with Java》一書的兩個章節中還有其他資料。這些材料是必讀內容。本書中有一個案例研究,它提供了一些關於規則結構如何強大的提示(我認為這可能也是 Max Muller 寫的)。這個案例研究也是對一些 Wonder 框架的簡要介紹(在它們開源之前)。案例研究章節中的應用程式示例也位於 Wonder 框架中(Wonder/Common/Examples/Wrox/NetstruxrCaseStudy/)。一旦確保 EOModel 指向正確的資料庫,您就可以執行它。NetstruxrCaseStudy 的重要之處在於它使用了 D2W 並提供了可以在應用程式中新增的規則型別的示例。特別是,它涵蓋了建立子任務的概念。
以下是我嘗試學習 direct to web 工作原理時做的一些筆記。我希望它們對您有所幫助。整個過程,包括所有嘗試和錯誤、在錯誤的地方查詢內容、使專案正確構建以及編寫這份簡短的摘要(讀者希望現在能夠避免的大部分任務)花費了我大約三個小時。最後,我覺得我比較瞭解 direct to web 的基本用法(但對 project wonder 新增的內容一無所知)。
我建議從http://www.stepwise.com/Articles/Technical/D2W/D2W1.html開始。這篇文章也包含在 project wonder 的 D2WListExample 專案中(有關如何從 Eclipse 獲取它,請參見下面),位於 Components/BestKeptSecret.wo/BestKeptSecret.html 中。這篇文章寫得很好,但第一部分對我來說非常令人困惑。一旦我終於理解了它在談論什麼,我就寫了一個簡短的內容摘要,這對我更有意義。該摘要顯示在下面,但在您開始閱讀之前,我強烈建議您建立一個 Eclipse 工作區來儲存 project wonder 專案和示例(這樣您就可以輕鬆地引用原始碼)。我直接下載了所有內容,如下所示
首先,我在 Eclipse 中建立了一個新工作區(檔案 -> 切換工作區)。我將其命名為“CurrentWonder”,因為它將儲存從 CVS 匯入的所有專案。文章中引用的專案(D2WListExample)已經存在於 Wonder 儲存庫中的 Eclipse 格式下,因此您不需要按照文章中的連結獲取程式碼(連結的程式碼是 XCode 格式的,而且相當舊)。
在 Eclipse 中籤出 Wonder,在包資源管理器中右鍵單擊匯入 CVS -> 從 CVS 匯入專案主機:wonder.cvs.sourceforge.net 儲存庫路徑:/cvsroot/wonder 使用者:匿名使用現有模組(我選擇了下面列出的所有模組)common -> examples -> D2WComponentTour frameworks -> all ERDirectToWeb
預設情況下,我的 Eclipse 編譯器設定為使用 Java 1.4.2。我似乎遇到了很多編譯錯誤,將 Eclipse 編譯器和執行時切換到 1.5 確實有所幫助(檢視首選項 -> Java)。此外,當我簽出幾個專案時,它們似乎沒有正確下載所有內容,因為缺少編譯器抱怨的一些部分。我對相關專案進行了更新(在包資源管理器中右鍵單擊專案 -> 團隊 -> 更新),一切正常。最後,在完成所有這些操作後,我必須清理所有專案,才能在修復那些沒有下載所有內容的專案後,使依賴專案正確構建(專案 -> 清理 -> 清理所有專案)。現在,我擁有了一套完整且構建正常的 project wonder 框架和示例。
好了,現在我們準備好了!如果您願意,請閱讀下面的摘要,然後深入第一篇“Best Kept Secret”文章!閱讀完後,開啟 D2WListExample -> Components -> BestKeptSecret 並閱讀下一篇文章。
在元件中,您通常希望顯示一個 EO 列表。您可以建立一個表格和顯示組,新增標題,新增重複項,新增用於對列進行排序的函式,新增編輯按鈕,等等。或者,您可以使用可重用的元件。由於此特定元件具有很多可配置的部分,因此使用帶有繫結的標準組件將無法正常工作。潛在的繫結太多了。因此,您可以使用一個名為 D2WList 的特殊元件,它接受您要顯示的專案列表(“list”)、來自您 eomodel 中的列表中專案的實體名稱(“entityName”)以及指向定義在其他地方的關於此列表的顯示屬性的規則集的標籤(“pageConfiguration”)。如果您檢視 D2WListExample 專案中的 MyD2WListPage2.wo,您將看到一個名為 List1 的 WebObjects 標記,其型別為 D2WList(繫結顯示在下面)
List1: D2WList { pageConfiguration = "ListMovies2"; list = session.movies; entityName = "Movie"; }
我之前提到的“在其他地方定義的規則集”位於專案資原始檔夾中的 direct to web 模型檔案:user.d2wmodel。您可以在 RuleModeler 中開啟此檔案(可以在http://webobjects.mdimension.com/wonder/找到),並設定各種屬性,例如用於顯示列表的模板、列表中每個專案的可編輯性、要顯示的屬性等等。RuleModeler 中顯示的“左手側鍵”列是允許 D2WList 元件找到它正在顯示的列表的規則的東西。
您也可以生成完整的頁面,而不是包含列表的頁面的一部分。這篇文章的這部分對我更有意義,因此我將直接將讀者引向它(從標有“動態頁面建立”的部分開始)。現在您已經瞭解了這篇文章在幫助您做什麼,希望第一部分也更有意義。
以下是如何使用 Xcode 2.3、WebObjects 5.3.1 和 Mac OS 10.4.6 開始使用 Wonder 的 Direct-to-Web 擴充套件的快速方法
- 下載並安裝 Wonder 框架
- 按照Project Wonder 快速入門操作,但以下幾點不同
- 將 ERDirectToWeb.framework 新增到您的專案中
- 您需要將一個 EOModel 新增到您的專案中,可以是您自己的模型,也可以是 JavaRealEstate.framework 或 JavaBusinessLogic.framework 中的示例模型
- 讓 DirectAction 擴充套件 ERD2WDirectAction,而不是 ERXDirectAction。您需要匯入 er.directtoweb.*;
- 現在,透過將頁面配置名稱附加到實體名稱,嘗試一些ERD2WDirectAction提供的直接操作。因此,ListCustomer 將使用 Wonder 的 List 頁面配置和 Customer 實體。文件中未顯示的其他一些頁面配置包括
- EditList<EntityName>:這將顯示實體的列表檢視,但所有欄位對於所有行都是可編輯的
- ListGrouping<EntityName>:為此,您需要新增一條規則,例如:(pageConfiguration = 'ListGroupListingAddress') => groupingKey = "city" -- ListGrouping 模板似乎無法使用此配置正確分組。
- ListXML<EntityName>:這將以某種奇怪的 XML 格式返回列表。當然,格式可以更改以滿足您的需求。還提供 CSV 格式,但您需要新增類似(pageConfiguration like 'ListCSV*') => subTask = 'csv' 的規則,然後 ListCSVCustomer 將以管道分隔的格式輸出。您還可以新增類似(pageConfiguration like '*PrinterFriendly*') => subTask = 'printerFriendly' 的規則,然後 ListPrinterFriendlyCustomer 將以易於列印的格式顯示列表。
- ListCompact<EntityName>、PickCompact<EntityName> 等:緊湊格式不包括頁面包裝器和導航欄
- 要檢視一些 D2W 除錯詳細資訊,請在 Xcode 專案(Components 資料夾中)中開啟 PageWrapper.wo 模板。在現有內容(動態 -> 自定義...)下方插入一個自定義元件,其類為 ERD2WDebugFlags。單擊確定,然後儲存檔案。
為了使這個新元件可見,您的應用程式必須處於開發模式。這涉及在屬性檔案中設定一個屬性:er.extensions.ERXApplication.developmentMode=TRUE
返回瀏覽器並重新整理螢幕,您應該看到兩個用於 Log4J 和 D2W 資訊的新連結。單擊 D2W 資訊連結,它將顯示一些有關給定元件的活動設定的詳細資訊。-- 我的示例房地產資料庫版本中,Agents 有一些錯誤資料,因此您可能在處理 Agent 和 AgentPhoto 實體時遇到問題,直到您手動清除它。
- RuleModeler,一個規則編輯器替代方案