使用 Sling 介面卡

Sling 選件 適配器模式 方便地轉換實現 適應性 介面。 此介面提供一般 adaptTo() 將物件轉譯為要作為引數傳遞的類別類型的方法。

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

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

使用案例

有下列使用案例:

  • 取得實作專屬物件。

    例如,以JCR為基礎的一般實作 Resource 介面提供對基礎JCR的訪問 Node.

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

    例如,以JCR為基礎 ResourceResolver 保有對請求的引用 JCR Session,而許多物件則需要此工作階段,例如 PageManagerUserManager.

  • 服務的捷徑。

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

Null返回值

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 服務運行時並查看其「適配器」(源和目標)配置,但不將它們相互映射。 最後,這取決於內部邏輯,必須加以記錄。 因此,這個參考。

引用

Sling

資源 適應於:

節點 如果這是基於JCR的資源或引用節點的JCR屬性。
屬性 如果這是JCR型屬性型資源。
項目 如果這是以JCR為基礎的資源(節點或屬性)。
地圖 如果這是基於JCR節點的資源(或其他資源支援值映射),則返回屬性的映射。
ValueMap 如果屬性是基於JCR節點的資源(或其他資源支援值映射),則返回屬性的方便使用映射。 也可使用
ResourceUtil.getValueMap(Resource) (處理空大小寫等)。
InheritanceValueMap 的擴充功能 ValueMap 這可讓您在尋找屬性時考慮資源的階層。
可修改的值映射 的擴充功能 ValueMap,可讓您修改該節點上的屬性。
InputStream 傳回檔案資源的二進位內容(如果這是基於JCR的資源,且節點類型為 nt:filent:resource;如果這是捆綁資源;檔案內容(如果這是檔案系統資源)或二進位JCR屬性資源的資料。
URL 傳回資源的URL(如果這是基於JCR節點的資源,則此節點的儲存庫URL;jar套件URL(如果這是套件資源);檔案URL(如果這是檔案系統資源)。
檔案 如果這是檔案系統資源。
SlingScript 如果此資源是指令碼(例如jsp檔案),且指令碼引擎已使用sling進行註冊。
Servlet 如果此資源是指令碼(例如jsp檔案),且指令碼引擎已使用sling註冊,或者這是servlet資源。
字串
布林值

雙倍
日曆

字串[]
布林[]
長[]
日曆[]
值[]
如果這是以JCR為基礎的資源(且值符合),則傳回值。
LakedResource 如果這是JCR節點型資源。
Page 如果這是JCR型資源,且節點為 cq:Page (或 cq:PseudoPage)。
Component 如果這是 cq:Component 節點資源。
Design 如果這是設計節點(cq:Page)。
範本 如果這是 cq:Template 節點資源。
Blueprint 如果這是 cq:Template 節點資源。
資產 如果這是dam:Asset節點資源。
轉譯 如果這是dam:Asset轉譯(nt:file,位於dam:Assert的轉譯資料夾下)
標記 如果這是 cq:Tag 節點資源。
UserManager 根據JCR工作階段(如果這是以JCR為基礎的資源,且使用者擁有存取UserManager的權限)。
可授權項目 「可授權」是「使用者」和「群組」的通用基礎介面。
使用者 使用者是特殊的可授權項目,可進行驗證及模擬。
SimpleSearch 在資源下方搜尋(或如果這是JCR型資源,則使用setSearchIn())。
WorkflowStatus 指定頁面/工作流程裝載節點的工作流程狀態。
複製狀態 指定資源或其jcr:content子節點的復寫狀態(先勾選)。
ConnectorResource 如果某些類型是基於JCR節點的資源,則返回已調整的連接器資源。
設定 如果這是 cq:ContentSyncConfig 節點資源。
ConfigEntry 如果低於 cq:ContentSyncConfig 節點資源。

ResourceResolver 適應於:

工作階段 如果這是以JCR為基礎的資源解析器(預設),則要求的JCR工作階段。
PageManager  
元件管理器  
Designer  
AssetManager 根據JCR工作階段,如果這是以JCR為基礎的資源解析器。
TagManager 根據JCR工作階段,如果這是以JCR為基礎的資源解析器。
UserManager UserManager提供對和方法的訪問,以維護可授權對象(即用戶和組)。 UserManager綁定到特定會話。
可授權項目 目前的使用者。
使用者
目前的使用者。
QueryBuilder
外置器 用於外部化絕對URL,即使沒有要求物件亦然。

SlingHttpServletRequest 適應於:

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

SlingHttpServletResponse 適應於:

ContentHandler
(XML)
如果這是Sling重寫程式回應。

WCM

頁面 適應於:

Resource
頁面的資源。
LakedResource 標示為資源(==此)。
節點 頁面的節點。
... 頁面資源可調整的所有項目。

元件 適應於:

資源 元件的資源。
LakedResource 標示為資源(==此)。
節點 元件的節點。
元件資源可適用於的所有項目。

範本 適應於:

Resource
範本的資源。
LakedResource 標示為資源(==此)。
節點 此模板的節點。
... 範本資源可調整的所有項目。

安全性

可授權, 使用者群組 適應:

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

DAM

資產 適應於:

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

標記

標籤 適應於:

資源 標籤的資源。
節點 標籤的節點。
標籤資源可調整的所有項目。

其他

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

本頁內容