在xPages中使用数据上下文有什么好处?

时间:2012-02-23 13:24:00

标签: datacontext xpages

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

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

所以假设我在ssjs中有一个返回notesdocument的函数,可以从我的xpage中的几个地方调用这个函数。在这种情况下,数据上下文对于在ssjs脚本库中具有函数的注册表是有益的。

2 个答案:

答案 0 :(得分:7)

dataContexts可以被认为是全局变量。 SSJS功能的优点是:

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

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

我怀疑还有性能优势,因为对dataContexts的引用使用EL。所以在引用中没有任何一点你运行SSJS,所以它不必通过SSJS解析器。

dataContexts的额外好处是它们可以限定到数据源可以达到的任何级别 - 所以XPage,Custom Control或Panel。这使它们比viewScope更具优势。因此,您还可以在重复控件的面板中设置dataContext,以避免多次引用NotesDocument的字段或字段的连接。

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

答案 1 :(得分:1)

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

这些无效

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

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

这是否有效

我喜欢dataContext var在Control的Properties选项卡的Data部分的DataSources列表中显示的方式,在该部分中输入了DataContext。

  1. 从定义DataContext开始: var = DataStoreDbName
  2. 此数据上下文变量是我在@ DbLookup中使用的Server:DB的外部数据库。

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

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

  4. enter image description here

    1. 上面是另一个DataConext(显然)的示例,但这里是变量名在字段计算中的使用方式或隐藏字段的customCoverters中的使用方式(这使隐藏字段的行为类似于Notes中的计算字段)。 *注意@Text()的总和,以避免抛出错误。
    2. enter image description here

      < xp:text>只需显示DataContext变量值 < xp:inputHidden>使用customCoverter中的DataContext变量值来存储/保存提交/保存的值。