使用 Sling 介面卡 using-sling-adapters

CAUTION
AEM 6.4已結束延伸支援,本檔案不再更新。 如需詳細資訊,請參閱 技術支援期. 尋找支援的版本 此處.

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

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

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

使用案例 use-cases

有下列使用案例:

  • 取得實作專屬物件。

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

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

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

  • 服務的捷徑。

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

Null返回值 null-return-value

adaptTo() 可返回null。

原因多種多樣,包括:

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

請務必優雅地處理空大小寫。 對於jsp呈現,如果jsp失敗會導致內容為空,則可能是可接受的。

快取 caching

為了改善效能,實施可免費快取從 obj.adaptTo() 呼叫。 若 obj 相同,則傳回的物件相同。

會針對所有使用者執行此快取 AdapterFactory 根據案例。

但是,沒有一般規則 — 物件可以是新例項或現有例項。 這表示您無法依賴任何一種行為。 因此,它很重要,尤其是內部 AdapterFactory,即物件可在此案例中重複使用。

運作方式 how-it-works

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

  • 物體本身;實作方法本身並對應至特定物件。

  • AdapterFactory,可映射任意對象。

    物件仍必須實作 Adaptable 介面和必須擴充 SlingAdaptable (通過 adaptTo 呼叫中央適配器管理器)。

    這可讓鈎點進入 adaptTo 現有類的機制,例如 Resource.

  • 兩者結合。

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

參考 reference

Sling sling

資源 適應於:

節點
如果這是基於JCR的資源或引用節點的JCR屬性。
屬性
如果這是JCR型屬性型資源。
項目
如果這是以JCR為基礎的資源(節點或屬性)。
地圖
如果這是基於JCR節點的資源(或其他資源支援值映射),則返回屬性的映射。
ValueMap
如果屬性是基於JCR節點的資源(或其他資源支援值映射),則返回屬性的方便使用映射。 也可使用
ResourceUtil.getValueMap(Resource) (處理空大小寫等)。
InheritanceValueMap
的擴充功能 ValueMap 這可讓您在尋找屬性時考慮資源的階層。
PersistableValueMap
如果這是JCR節點型資源,且使用者擁有修改該節點上屬性的權限。
注意:多個可持續映射不共用其值。
InputStream
傳回「檔案」的二進位內容nt:resource
AuthorizableResourceProvider``org.apache.sling.jackrabbit.usermanager``/system/userManager
cq:Page``cq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig

ResourceResolver 適應於:

工作階段
如果這是以JCR為基礎的資源解析器(預設),則要求的JCR工作階段。
PageManager
元件管理器
Designer
AssetManager
根據JCR工作階段,如果這是以JCR為基礎的資源解析器。
TagManager
根據JCR工作階段,如果這是以JCR為基礎的資源解析器。
UserManager
根據JCR工作階段,如果這是以JCR為基礎的資源解析器,以及使用者是否具有存取UserManager的權限。
可授權項目
目前的使用者。
使用者
目前的使用者。
PrivilegeManager
偏好設定
目前使用者的偏好設定(如果這是以JCR為基礎的資源解析器,則以JCR工作階段為基礎)。
首選項服務
PinManager
QueryBuilder
外置器
用於外部化絕對URL,即使沒有要求物件亦然。

SlingHttpServletRequest 適應於:

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

SlingHttpServletResponse 適應於:

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

WCM wcm

頁面 適應於:

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

元件 適應於:

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

範本 適應於:

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

安全性 security

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

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

DAM dam

資產 適應於:

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

標記 tagging

標籤 適應於:

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

其他 other

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

recommendation-more-help
2315f3f5-cb4a-4530-9999-30c8319c520e