使用 Sling 介面卡

Slingoffers an Adapter patterno to fully translate objects that implement the Adaptableinterface.此介面提供通用adaptTo()方法,將對象轉換為作為參數傳遞的類類型。

例如,要將資源對象轉換為相應的節點對象,您只需執行以下操作:

Node node = resource.adaptTo(Node.class);

使用案例

以下是使用案例:

  • 取得實作專屬物件。

    例如,通用Resource介面的基於JCR的實現提供對基礎JCR Node的訪問。

  • 建立需要傳遞內部上下文對象的對象的快捷方式。

    例如,以JCR為基礎的ResourceResolver包含請求的JCR Session參考,而許多將根據該請求作業運作的物件則需要該參考,例如PageManagerUserManager

  • 服務的捷徑。

    罕見的案例- sling.getService()也很簡單。

空返回值

adaptTo() 可以返回null。

原因有多種,包括:

  • 實作不支援目標類型
  • 處理此情況的適配器工廠不活動(如 由於缺少服務引用)
  • 內部條件失敗
  • 服務不可用

請務必妥善處理空值大小寫。 對於jsp渲染,如果jsp失敗,則可能會導致內容為空,這是可接受的。

快取

為了改善效能,實作可自由快取從obj.adaptTo()呼叫傳回的物件。 如果obj相同,則返回的對象相同。

此快取會針對所有AdapterFactory基本案例執行。

但是,沒有一般規則——物件可以是新例項或現有例項。 這表示您無法依賴這兩種行為。 因此,在AdapterFactory內部,對象在此場景中可重複使用非常重要。

其運作方式

Adaptable.adaptTo()有多種實作方式:

  • 物體本身;實現方法本身並映射到特定對象。

  • 通過AdapterFactory,可映射任意對象。

    這些對象仍必須實施Adaptable介面,並且必須擴展SlingAdaptable(它將adaptTo調用傳遞給中央適配器管理器)。

    這允許對現有類(如Resource)的adaptTo機制進行掛接。

  • 兩者的結合。

對於第一種情況,javadocs可以說明adaptTo-targets的可能性。 但是,對於特定子類(如基於JCR的資源),通常不可能。 在後一種情況下,AdapterFactory的實施通常屬於綁定的私有類,因此不會在客戶端API中公開,也不會列在javadoc中。 從理論上講,從OSGi服務運行時訪問所有AdapterFactory實現並查看其「適配器」(源和目標)配置,但不能將它們相互映射。 最後,這取決於內部邏輯,而內部邏輯必須加以記錄。 因此,這一參考。

引用

Sling

源適應:

節點 如果這是基於JCR節點的資源或引用節點的JCR屬性。
屬性 如果這是基於JCR屬性的資源。
項目 如果這是基於JCR的資源(節點或屬性)。
地圖 如果這是基於JCR節點的資源(或其他資源支援值映射),則返回屬性的映射。
ValueMap 如果屬性是基於JCR節點的資源(或其他資源支援值映射),則返回該屬性的方便使用映射。 也可以使用
ResourceUtil.getValueMap(Resource)(處理空大小寫等)來實現(更簡單)。
InheritanceValueMap ValueMap的擴展,允許在查找屬性時考慮資源的層次。
ModifableValueMap ValueMap的擴展,允許您修改該節點上的屬性。
InputStream 返回檔案資源的二進位內容(如果這是基於JCR的資源,且節點類型為nt:filent:resource;如果這是包資源;檔案內容(如果這是檔案系統資源)或二進位JCR屬性資源的資料。
URL 返回資源的URL(如果此節點是基於JCR節點的資源,則返回此節點的儲存庫URL;jar bundle URL(如果這是包資源);檔案URL(如果這是檔案系統資源)。
檔案 如果這是檔案系統資源。
SlingScript 如果此資源是指其指令碼引擎已註冊為sling的指令碼(例如jsp檔案)。
Servlet 如果此資源是指已使用sling註冊指令碼引擎的指令碼(例如jsp檔案),或此為servlet資源。
StringBooleanLongDoubleCalendarValueString[]





Boolean[]
Long[]
Calendar[]

Value[]
如果這是基於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,即使沒有請求物件。

SlingHttpServletRequestateed適用於:

目標尚未定位,但實施了可適應性,可作為自定義AdapterFactory中的源。

SlingHttpServletResponse適用於:

ContentHandler
(XML)
如果這是吊索重寫回應。

WCM

面適應:

資源
頁面資源。
LakedResource 標籤資源(==此)。
節點 頁面的節點。
... 頁面資源可調整的一切。

件適應:

資源 元件的資源。
LakedResource 標籤資源(==此)。
節點 元件的節點。
元件資源可適應的所有內容。

本適應:

資源
範本的資源。
LakedResource 標籤資源(==此)。
節點 此模板的節點。
... 範本資源可以調整的一切。

安全性

可授權、使 ​用者 ​和群組適應:

節點 返回用戶/組主節點。
ReplicationStatus 返回用戶/組主節點的複製狀態。

DAM

用於:

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

標記

用於:

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

其他

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

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now