4

我从未在 xPages 中使用过数据上下文,我想知道它的好处,

如果我想在内存中返回一些东西,我经常在 SSJS 脚本库中调用函数,我相信它也存储在内存中。

因此,假设我在 ssjs 中有一个返回 notesdocument 的函数,该函数可能会从我的 xpage 中的多个位置调用。在这种情况下,数据上下文对于在 ssjs 脚本库中具有功能是否有益。

4

2 回答 2

7

dataContexts 可以被认为是全局变量。与 SSJS 函数相比的优点是:

1) dataContext 运行 SSJS / Java / 任何返回值。对 dataContext 的引用使用 EL(例如 #{myVar}),与数据源相同。所以我的理解是 EL 获得了价值,而不是每次都运行 SSJS/Java 代码。所以那里有性能优势。

2) dataContext 的值可以动态计算或在页面加载时计算。因此,您可以使用 ${javascript:@Today()} 并运行一次,而不是每次都运行一个函数。

我怀疑还有性能优势,因为对 dataContexts 的引用使用 EL。因此,您在引用中没有任何地方运行 SSJS,因此不必通过 SSJS 解析器。

dataContexts 的另一个好处是它们可以限定到数据源可以的任何级别 - 例如 XPage、自定义控件或面板。这使他们比 viewScope 更具优势。因此,您还可以在重复控件的面板中设置 dataContext,以避免多次引用 NotesDocument 的字段或连接字段。

我倾向于避免将 Domino 对象存储在 dataContexts 中,主要是因为回收的固有风险。不知道有没有问题

于 2012-02-23T13:55:43.633 回答
1

@Withers:当我在 dblookup 中使用我的 DataContext 变量 #{DataStoreDbName} 时,我发现 #{MyVar} 不起作用:(但我确实发现您的帖子非常有价值,威瑟斯先生)

这些不起作用

#{DataStoreDbName}
@Sum(@DbLookup("#{DataStoreDbName}","personnelbudget",compositeData.catid,10))

#{id:DataStoreDbName}
@Sum(@DbLookup("#{id:DataStoreDbName}","personnelbudget",compositeData.catid,10))

这确实有效

我喜欢 dataContext var 出现在输入 DataContext 的控件的属性选项卡的数据部分的数据源列表中的方式。

  1. 从定义 DataContext 开始: var = DataStoreDbName

  2. 此数据上下文变量是我在@DbLookup 中使用的 Server:DB 的外部数据库。

    DataStoreDbName ”变量名称现在显示在数据部分下的数据源中:

  3. 这是我使用 DataContext 的 DbLookup:@Sum(@DbLookup( DataStoreDbName ,"personnelbudget",compositeData.catid,10))

在此处输入图像描述

  1. 上面是另一个 DataConext 的示例(显然),但这里是变量名称如何用于字段中的计算或隐藏字段的 customCoverters(这使得隐藏字段的行为类似于 Notes 中的计算字段)。*注意@Text()'ing 总和以避免引发错误。

在此处输入图像描述

<xp:text> 仅显示 DataContext 变量值,而 <xp:inputHidden> 使用 customCoverter 中的 DataContext 变量值来存储/保留提交/保存时的值。

于 2012-09-28T19:43:34.447 回答