我从未在 xPages 中使用过数据上下文,我想知道它的好处,
如果我想在内存中返回一些东西,我经常在 SSJS 脚本库中调用函数,我相信它也存储在内存中。
因此,假设我在 ssjs 中有一个返回 notesdocument 的函数,该函数可能会从我的 xpage 中的多个位置调用。在这种情况下,数据上下文对于在 ssjs 脚本库中具有功能是否有益。
我从未在 xPages 中使用过数据上下文,我想知道它的好处,
如果我想在内存中返回一些东西,我经常在 SSJS 脚本库中调用函数,我相信它也存储在内存中。
因此,假设我在 ssjs 中有一个返回 notesdocument 的函数,该函数可能会从我的 xpage 中的多个位置调用。在这种情况下,数据上下文对于在 ssjs 脚本库中具有功能是否有益。
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 中,主要是因为回收的固有风险。不知道有没有问题
@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 的控件的属性选项卡的数据部分的数据源列表中的方式。
从定义 DataContext 开始: var = DataStoreDbName
此数据上下文变量是我在@DbLookup 中使用的 Server:DB 的外部数据库。
“ DataStoreDbName ”变量名称现在显示在数据部分下的数据源中:
这是我使用 DataContext 的 DbLookup:@Sum(@DbLookup( DataStoreDbName ,"personnelbudget",compositeData.catid,10))
<xp:text> 仅显示 DataContext 变量值,而 <xp:inputHidden> 使用 customCoverter 中的 DataContext 变量值来存储/保留提交/保存时的值。