最佳实践:sessionscope变量或属性定义

时间:2013-07-30 16:00:31

标签: xpages

要将XPage中的值移交给自定义控件,应该使用哪种方法? a)在设计时定义自定义控件中的属性。使用计算值填充XPage中的属性。在运行时通过自定义控件中的'compositeData'使用该值。 要么 b)将值放在BeforePageLoad事件中XPage的会话范围变量中。将会话范围变量绑定到自定义控件中的字段。

1 个答案:

答案 0 :(得分:11)

会话范围主要用于确保在用户在页面之间导航时值保持不变。我喜欢将其称为“购物车”范围:如果您在Domino中构建了一个电子商务网站,您不希望该网站忘记用户将产品添加到购物车只是因为他们点击了回家页。因此,当用户浏览应用程序时,此范围对于记住搜索/排序/过滤器选项等功能也非常有用,因此每次他们在其他地方导航并返回时,它都会记住他们之前的行为,而无需将此信息永久存储在NSF中。 / p>

但是,要将页面内信息从容器传递到自定义控件,compositeData绝对是可行的方法。这是因为仅在处理相关控件的持续时间内使用传递的参数填充该变量。一旦处理完该控件,所有指向传递参数的指针都会自动清理,与在每个用户会话期间存储相同信息相比,为每个实例提供增量可伸缩性改进。

存在重叠的情况:给定的自定义控件可能引用适合存储在会话范围中的信息。在这种情况下,我喜欢混合使用这两种技术......例如:

<xp:inputText value="#{sessionScope[compositeData.scopeKey]}" />

上述语法允许自定义控件通过其容器传递存储相关信息的会话范围中的位置的标识符。这提供了一些严格的灵活性,因为我可以将相同的控件放入多个上下文中,每个上下文都告诉控件它应该检索/存储哪些信息。