Show Menu
主题×

使用Sling适配器

Sling 提供Adapter 模式 ,可方便地翻译实现 Adaptivable 接口的对象。 此接口提供一 个通用adaptTo()方法 ,该方法将对象转换为作为参数传递的类类型。
例如,要将Resource对象转换为相应的Node对象,您只需执行以下操作:
Node node = resource.adaptTo(Node.class);

Use Cases

有以下用例:
  • 获取特定于实施的对象。
    例如,基于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
  • 两者兼有。
对于第一种情况,javadocs可以说明可 adaptTo-targets 能性。 但是,对于特定子类(如基于JCR的资源),这通常是不可能的。 在后一种情况下,实 AdapterFactory 现通常是包的专用类的一部分,因此不在客户端API中公开,也不在javadocs中列出。 理论上,可以从 AdapterFactory OSGi 配置OSGi 服务运行时访问所有实现并查看其“适配器”(源和目标)配置,但不能将它们相互映射。 最后,这取决于必须记录的内部逻辑。 因此,该参考。

针对开发人员的 Adobe AIR API 参考

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
ComponentManager
设计人员
AssetManager 基于JCR会话,如果这是基于JCR的资源解析程序。
TagManager 基于JCR会话,如果这是基于JCR的资源解析程序。
UserManager 基于JCR会话,如果这是基于JCR的资源解析程序,并且用户具有访问UserManager的权限。
可授权 当前用户。
用户 当前用户。
PrivilegeManager
首选项 当前用户的首选项(如果这是基于JCR的资源解析程序,则基于JCR会话)。
首选项服务
PinManager
QueryBuilder
外置器 用于将绝对URL外置,即使没有请求对象。
目标尚未确定,但实施了“适应性”,可用作自定义AdapterFactory中的源。
ContentHandler (XML) 如果这是笔记重写者的回应。

WCM

页面会​ 调整为:
资源 页面的资源。
LabeledResource 标记的资源(== this)。
节点 页面的节点。
... 页面资源可以调整的所有内容。
组件的资源。
标记的资源(== this)。
组件的节点。
...
组件的资源可以调整到的所有内容。
模板​ 适应于:
资源 Node.html模板的资源。
LabeledResource 标记的资源(== this)。
节点 此模板的节点。
... 模板资源可以调整的所有内容。

安全

可授权​ ,用 组​ 可适应:
返回用户/用户组主节点。
返回用户/用户组主节点的复制状态。

DAM

资产会​ 适应:
资产的资源。
资产的节点。
...
资产资源可以适应的所有内容。

标记

标记的资源。
标记的节点。
...
标记资源可以适应的所有内容。

其他

此外,Sling / JCR / OCM还为自定义OCM(对 [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) 象内容映 射)对象提供了一个支持