XPages扩展库和对象数据源用法

时间:2013-03-07 15:15:42

标签: xpages xpages-extlib

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

1 个答案:

答案 0 :(得分:6)

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

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

  1. 如果requestParamPrefix属性被赋予非空字符串值,则每个属性 如果URL包含相应的属性,则仅覆盖属性 与指定前缀加上匹配的参数 - 例如 blog_documentIdcomment_formName。通过默认值提供的值 参数(不带匹配前缀)将被忽略。
  2. 如果ignoreRequestParams属性的计算结果为true,则为no 数据源的属性将被URL覆盖,无论如何 查询字符串参数值。此属性的默认值为false,因此如果要确保URL never 影响属性值,则必须在特定数据源实例上将其设置为true那个例子。
  3. 但是,对象数据源尚未实现此行为。因此,为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)来检索文档并加载字段值,根据在中标识的外键查询非Domino数据。 URL ...对于这种类型的数据源,天空的限制正是因为没有提前定义。