我从未在xPages中使用数据上下文,并且想知道其中的好处,
如果我想在内存中返回一些内容,我经常在SSJS脚本库中调用函数,我相信它也存储在内存中。
所以假设我在ssjs中有一个返回notesdocument的函数,可以从我的xpage中的几个地方调用这个函数。在这种情况下,数据上下文对于在ssjs脚本库中具有函数的注册表是有益的。
答案 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。
此数据上下文变量是我在@ DbLookup中使用的Server:DB的外部数据库。
“ DataStoreDbName ”变量名现在显示在数据部分下的数据源中:
这是我在使用DataContext的DbLookup: @Sum(@DbLookup(的 DataStoreDbName 下, “personnelbudget”,compositeData.catid,10))
< xp:text>只需显示DataContext变量值 < xp:inputHidden>使用customCoverter中的DataContext变量值来存储/保存提交/保存的值。