Show Menu
主題×

使用 Sling 介面卡

Sling 提供Adapter 模式 ,可方便轉譯實作 Appative Interface的物件。 此介面提供一 般的adpatTo() 方法,可將物件轉換為作為引數傳遞的類別類型。
例如,要將資源對象轉換為相應的節點對象,您只需執行以下操作:
Node node = resource.adaptTo(Node.class);

使用案例

以下是使用案例:
  • 取得實作專屬物件。
    例如,以JCR為基礎的通用介面實作可 Resource 讓您存取基礎JCR Node
  • 建立需要傳遞內部上下文對象的對象的快捷方式。
    例如,以JCR為基 ResourceResolver 礎的參考會保留請求的引用 JCR Session ,而許多將根據請求作業(如 PageManager 或)運作的物件則需要此參考 UserManager
  • 服務的捷徑。
    一個罕見的例 sling.getService() 子——也很簡單。

空返回值

adaptTo() 可以返回null。
原因有多種,包括:
  • 實作不支援目標類型
  • 處理此情況的適配器工廠不活動(如 由於缺少服務引用)
  • 內部條件失敗
  • 服務不可用
請務必妥善處理空值大小寫。 對於jsp渲染,如果jsp失敗,則可能會導致內容為空,這是可接受的。

快取

為了改進效能,實現可自由快取從調用返回的 obj.adaptTo() 對象。 如果 obj 相同,則返回的對象相同。
此快取會針對所有基 AdapterFactory 礎案例執行。
但是,沒有一般規則——物件可以是新例項或現有例項。 這表示您無法依賴這兩種行為。 因此,在此場景中,物件可重 AdapterFactory 復使用,這一點非常重要,尤其是在內部。

運作方式

有多種可實 Adaptable.adaptTo() 施的方式:
  • 物體本身;實現方法本身並映射到特定對象。
  • 由, AdapterFactory 可映射任意對象。
    對象仍必須實施接 Adaptable 口並且必須擴展 SlingAdaptable (這會將調 adaptTo 用傳遞給中央適配器管理器)。
    這允許將掛接 adaptTo 到現有類的機制中,如 Resource
  • 兩者的結合。
在第一種情況下,javadoc可以說明可 adaptTo-targets 能性。 但是,對於特定子類(如基於JCR的資源),通常不可能。 在後一種情況下,實 AdapterFactory 施通常是綁定的私有類的一部分,因此不在客戶端API中公開,也不列在javadoc中。 從理論上講,從 AdapterFactory OSGi 為 AEM 雲端服務設定 OSGi service runtime訪問所有實現並查看其「適配器」(源和目標)配置是可能的,但不是將它們相互映射。 最後,這取決於內部邏輯,而內部邏輯必須加以記錄。 因此,這一參考。

引用

Sling

資源​ 適應:
節點 如果這是基於JCR節點的資源或引用節點的JCR屬性。
屬性 如果這是基於JCR屬性的資源。
項目 如果這是基於JCR的資源(節點或屬性)。
地圖 如果這是基於JCR節點的資源(或其他資源支援值映射),則返回屬性的映射。
ValueMap 如果屬性是基於JCR節點的資源(或其他資源支援值映射),則返回該屬性的方便使用映射。 也可以使用 (控制 ResourceUtil.getValueMap(Resource) 空大小寫等)來實現(更簡單)。
InheritanceValueMap ValueMap的 擴充功能 ,可讓您在尋找屬性時,考慮資源階層。
ModifableValueMap ValueMap的擴 ,允許您修改該節點上的屬性。
InputStream 返回檔案資源的二進位內容(如果這是基於JCR節點的資源,且節點類型為 nt:file nt:resource ;如果這是包資源;檔案內容(如果這是檔案系統資源)或二進位JCR屬性資源的資料。
URL 返回資源的URL(如果此節點是基於JCR節點的資源,則返回此節點的儲存庫URL;jar bundle URL(如果這是包資源);檔案URL(如果這是檔案系統資源)。
檔案 如果這是檔案系統資源。
SlingScript 如果此資源是指其指令碼引擎已註冊為sling的指令碼(例如jsp檔案)。
Servlet 如果此資源是指已使用sling註冊指令碼引擎的指令碼(例如jsp檔案),或此為servlet資源。
String Boolean Long Long Long Double Calendar Value Ling Double.htmlCalendar.htmlValue.htmlString.htmlBoolean.htmlLong.htmlCalendar.htmlDouble Calendar String[]Long[]Long[]Calendar[BooleanCalendarValue[]BooleanCalendar[] 如果這是基於JCR屬性的資源(且值符合),則返回值。
LakedResource 如果這是基於JCR節點的資源。
頁面 如果這是基於JCR節點的資源,且節點是 cq:Page (或 cq:PseudoPage )。
元件 如果這是節 cq:Component 點資源。
設計 如果這是設計節點( cq:Page )。
範本 如果這是節 cq:Template 點資源。
Blueprint 如果這是節 cq:Template 點資源。
資產 如果這是dam:資產節點資源。
轉譯 如果這是dam:Asset轉譯(nt:file,位於dam:Assert的轉譯資料夾下)
標記 如果這是節 cq:Tag 點資源。
UserManager 根據JCR會話(如果這是基於JCR的資源,且用戶具有訪問UserManager的權限)。
可授權項目 「可授權」是「使用者」和「群組」的常見基本介面。
使用者 使用者是可驗證和模擬的特殊可授權使用者。
SimpleSearch 在資源下進行搜索(如果這是基於JCR的資源,則使用setSearchIn())。
WorkflowStatus 指定頁面/工作流裝載節點的工作流狀態。
ReplicationStatus 給定資源或其jcr:content子節點的複製狀態(首先選中)。
ConnectorResource 如果這是基於JCR節點的資源,則返回某些類型的適配連接器資源。
設定 如果這是節 cq:ContentSyncConfig 點資源。
ConfigEntry 如果此值在節點資 cq:ContentSyncConfig 源下。
資源解析器​ 適用於:
會話 請求的JCR會話(如果這是基於JCR的資源解析器(預設))。
PageManager  
ComponentManager  
設計人員  
AssetManager 根據JCR會話,如果這是基於JCR的資源解析器。
TagManager 根據JCR會話,如果這是基於JCR的資源解析器。
UserManager UserManager提供對可授權對象(即用戶和組)的訪問和維護方法。 UserManager綁定到特定會話。
可授權項目 目前的使用者。
使用者 目前的使用者。
QueryBuilder
外置式 用於外部化絕對URL,即使沒有請求物件亦然。
目標尚未定位,但實施了可適應性,可作為自定義AdapterFactory中的源。
ContentHandler (XML) 如果這是吊索重寫回應。

WCM

頁面 ,可適應:
資源 頁面資源。
LakedResource 標籤資源(==此)。
節點 頁面的節點。
... 頁面資源可調整的一切。
元件 ​適應:
元件的資源。
標籤資源(==此)。
元件的節點。
...
元件資源可適應的所有內容。
範本 ​適應:
資源 Node.html範本的資源。
LakedResource 標籤資源(==此)。
節點 此模板的節點。
... 範本資源可以調整的一切。

安全性

可授權 、使 用者 群組 ,可調整:
返回用戶/組主節點。
返回用戶/組主節點的複製狀態。

DAM

資產適應 :
資產的資源。
資產的節點。
...
資產資源可以適應的所有項目。

標記

標籤 適應:
標籤的資源。
標籤的節點。
...
標籤資源可以適應的一切。

其他

此外,Sling / JCR / OCM也提供自訂 [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) OCM(物件內 容對應 )物件。