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,一个规则编辑器替代方案