2013-03-07 59 views
1

包含在擴展庫(Domino 9中的默認設置)中有一個「對象數據源」功能。它非常方便的東西,但我無法找到任何文件。我有一個關於'ignoreRequestParams'屬性的問題......它是什麼意思以及如何使用它?通過啓用這個URL參數可以自動綁定到數據源對象的屬性?XPages擴展庫和對象數據源使用

+0

您可能需要閱讀源代碼 – stwissel 2013-03-08 06:51:34

回答

6

原始的兩個數據源(Domino Document和Domino View)都支持允許URL查詢字符串參數覆蓋屬性值的行爲。默認情況下,文檔數據源在查詢字符串中查找databaseName,formNamedocumentId;對於它所發現的任何這些屬性,相應的屬性將被設置爲參數值,而不管該屬性在XSP標記中可能分配了哪些值。

  1. 如果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)來檢索文檔並加載字段值,根據外鍵標識查詢非Domino數據URL ......這種類型的數據源,天空的極限正好是,因爲事先沒有定義。