Dav*_*rko 1 xpages xpages-extlib
包含在扩展库(Domino 9中的默认值)中,有一个"对象数据源"功能.它非常方便,但我找不到任何关于此的文档.我对'ignoreRequestParams'属性有疑问......它是什么意思以及如何使用它?通过启用这个URL params可以自动绑定到数据源对象属性吗?
原始的两个数据源(Domino Document和Domino View)都支持允许URL查询字符串参数覆盖属性值的行为.默认情况下,该文件的数据源,例如,寻找databaseName,formName以及documentId在查询字符串; 对于它找到的任何这些,相应的属性被设置为参数值,而不管该属性可能在XSP标记中分配了什么值.
可以通过两种方式自定义此行为:
requestParamPrefix属性指定了非空字符串值,则只有在URL包含与指定前缀和属性名称匹配的相应参数时才会覆盖每个属性- 例如
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") || "")
};
Run Code Online (Sandbox Code Playgroud)
这将导致一个对象,您可以将数据组件绑定到...例如,如果您var的数据源是"注册":
#{registration.firstName}
如果URL包含与属性名称匹配的参数,则对象的每个属性都将具有默认值.
当然,您的逻辑可能比这复杂得多:使用视图和关键参数(而不是文档ID)来检索文档并加载字段值,根据URL中标识的外键查询非Domino数据.使用这种类型的数据源,天空是极限,因为没有事先定义.