1

包含在扩展库中(默认在 Domino 9 中)有一个“对象数据源”功能。它非常方便,但我找不到任何关于此的文档。我对 'ignoreRequestParams' 属性有疑问......这是什么意思以及如何使用它?通过启用此功能,URL 参数是否可以自动绑定到数据源对象属性?

4

1 回答 1

6

原始的两个数据源(Domino 文档和 Domino 视图)都支持允许 URL 查询字符串参数覆盖属性值的行为。例如,默认情况下,文档数据源会在查询字符串中查找databaseNameformName和;documentId对于它找到的任何这些,相应的属性都设置为参数值,而不管该属性可能已在 XSP 标记中分配了什么值。

可以通过两种方式自定义此行为:

  1. 如果属性被赋予一个非空字符串值,那么只有当 URL 包含与指定前缀属性名称 requestParamPrefix相匹配的相应参数时,每个属性才会被覆盖——例如,。通过默认参数(不带匹配前缀)提供的值将被忽略。blog_documentIdcomment_formName
  2. 如果该ignoreRequestParams属性的计算结果为 true,则无论任何查询字符串参数值如何,数据源的任何属性都不会被 URL 覆盖。此属性的默认值为 false,因此如果要确保 URL永远不会影响该实例的属性值,则必须在特定数据源实例上将其设置为 true。

但是,尚未为对象数据源实现此行为。因此,为ignoreRequestParamsrequestParamPrefix属性设置的任何值都不会影响此类数据源的任何实例的行为。

也许它没有被实现的原因是因为对象数据源是完全任意的,所以没有预定义的假设它的任何实例都将支持特定的属性。您在createObject数据源实例的属性中定义一个“方法绑定”(SSJS 函数或 Java 方法),它构成了用于创建数据对象的业务逻辑。因此,生成的对象可以是您想要的任何东西,它可以支持您想要的任何属性,并且确定这些属性的初始值的逻辑可以是您想要的任何东西。因此,您当然可以自由地引用param该方法绑定中的内部全局变量,以在定义数据源的初始状态时考虑您希望的任何 URL 参数。

例如,以下将是createObject对象数据源实例的属性的完全有效的方法绑定:

return {
    firstName: (param.get("firstName") || ""),
    lastName: (param.get("lastName") || ""),
    email: (param.get("email") || "")
};

这将导致您可以将数据组件绑定到的对象......例如,如果您var的数据源是“注册”:

#{registration.firstName}

如果 URL 包含与属性名称匹配的参数,则对象的每个属性都将具有默认值。

自然,您的逻辑可能比这复杂得多:使用视图和键参数(而不是文档 ID)来检索文档并加载字段值,根据 URL 中标识的外键查询非 Domino 数据。 . 使用这种类型的数据源,正是因为没有预先定义任何东西,所以没有限制。

于 2013-03-08T08:15:42.053 回答