包含在扩展库中(默认在 Domino 9 中)有一个“对象数据源”功能。它非常方便,但我找不到任何关于此的文档。我对 'ignoreRequestParams' 属性有疑问......这是什么意思以及如何使用它?通过启用此功能,URL 参数是否可以自动绑定到数据源对象属性?
1 回答
原始的两个数据源(Domino 文档和 Domino 视图)都支持允许 URL 查询字符串参数覆盖属性值的行为。例如,默认情况下,文档数据源会在查询字符串中查找databaseName
、formName
和;documentId
对于它找到的任何这些,相应的属性都设置为参数值,而不管该属性可能已在 XSP 标记中分配了什么值。
可以通过两种方式自定义此行为:
- 如果属性被赋予一个非空字符串值,那么只有当 URL 包含与指定前缀和属性名称
requestParamPrefix
相匹配的相应参数时,每个属性才会被覆盖——例如,。通过默认参数(不带匹配前缀)提供的值将被忽略。blog_documentId
comment_formName
- 如果该
ignoreRequestParams
属性的计算结果为 true,则无论任何查询字符串参数值如何,数据源的任何属性都不会被 URL 覆盖。此属性的默认值为 false,因此如果要确保 URL永远不会影响该实例的属性值,则必须在特定数据源实例上将其设置为 true。
但是,尚未为对象数据源实现此行为。因此,为ignoreRequestParams
或requestParamPrefix
属性设置的任何值都不会影响此类数据源的任何实例的行为。
也许它没有被实现的原因是因为对象数据源是完全任意的,所以没有预定义的假设它的任何实例都将支持特定的属性。您在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 数据。 . 使用这种类型的数据源,正是因为没有预先定义任何东西,所以没有限制。