Show Menu
主题×

使用 Sling 适配器

Sling 优惠 Adapter模式 ,以便轻松转换实现Adaptible界 面的对 象。 此接口提供通 用的adaptTo( )方法,它将对象转换为作为参数传递的类类型。
例如,要将资源对象转换为相应的节点对象,您只需执行以下操作:
Node node = resource.adaptTo(Node.class);

Use Cases

有以下用例:
  • 获取特定于实施的对象。
    例如,基于JCR的通用接口实现提 Resource 供对基础JCR的访问 Node
  • 需要传递内部上下文对象的对象的快捷方式创建。
    例如,基于JCR的 ResourceResolver JCR保留对请求的引用,而请求的引用又是许多将基于该请求会话工作的对象(如或)所需 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中列出。 理论上,可以从OSGi服务 AdapterFactory 运行时访 问所有实现 ,并查看其“适配器”(源和目标)配置,但不能将它们相互映射。 最后,这取决于必须记录的内部逻辑。 因此,这一参考。

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

Sling

资源​ 适应于:
节点 如果这是基于JCR节点的资源或引用节点的JCR属性。
属性 如果这是基于JCR属性的资源。
项目 如果这是基于JCR的资源(节点或属性)。
地图 如果这是基于JCR节点的资源(或其他资源支持值映射),则返回属性的映射。
ValueMap 如果这是基于JCR节点的资源(或其他资源支持值映射),则返回属性的易于使用的映射。 还可以通过使用(处理空大小写 ResourceUtil.getValueMap(Resource) 等)来实现(更简单)。
继承值映射 ValueMap的 扩展 ,它允许在查找属性时考虑资源的层次结构。
ModifableValueMap ValueMap的扩 ,允许您修改该节点上的属性。
InputStream 返回文件资源的二进制内容(如果这是基于JCR节点的资源,且节点类型为 nt:file nt:resource ;如果这是捆绑资源;文件内容(如果这是文件系统资源)或二进制JCR属性资源的数据。
URL 返回资源的URL(如果此节点是基于JCR节点的资源,则返回此节点的存储库URL;jar bundle URL(如果这是捆绑资源);文件URL(如果这是文件系统资源)。
文件 如果这是文件系统资源。
SlingScript 如果此资源是脚本(例如jsp文件),则脚本引擎将注册为sling。
Servlet 如果此资源是脚本(例如jsp文件),其脚本引擎使用sling进行注册,或如果这是servlet资源。
String Boolean Long Long Obelan值BooleanLong Double.htmlCalendar.htmlValue.htmlString.htmlBoolean.htmlLong.htmlCalendar.html多次值Boolean[]Boolean[]Long[]JolenCalendar Long[]JolanValue[] 如果这是基于JCR属性的资源(且值符合),则返回值。
LabeledResource 如果这是基于JCR节点的资源。
页面 如果这是基于JCR节点的资源,且该节点是 cq:Page (或 cq:PseudoPage )。
组件 如果这是节 cq:Component 点资源。
设计 如果这是设计节点( cq:Page )。
模板 如果这是节 cq:Template 点资源。
Blueprint 如果这是节 cq:Template 点资源。
资产 如果这是dam:资产节点资源。
再现 如果这是dam:资产演绎版(nt:file位于dam的演绎版文件夹下:Assert)
Tag 如果这是节 cq:Tag 点资源。
UserManager 如果这是基于JCR的资源,且用户具有访问UserManager的权限,则基于JCR会话。
可授权 “可授权”是用户和组的通用基本界面。
用户 用户是可验证和模拟的可授权的特殊用户。
SimpleSearch 在资源下搜索(如果这是基于JCR的资源,则使用setSearchIn())。
WorkflowStatus 给定页面/工作流有效负荷节点的工作流状态。
复制状态 给定资源或其jcr:content子节点的复制状态(先选中)。
连接器资源 如果这是基于JCR节点的资源,则返回特定类型的适配连接器资源。
配置 如果这是节 cq:ContentSyncConfig 点资源。
ConfigEntry 如果它位于节点资 cq:ContentSyncConfig 源下方。
会话 请求的JCR会话(如果这是基于JCR的资源解析程序(默认))。
PageManager  
ComponentManager  
设计人员  
AssetManager 基于JCR会话,如果这是基于JCR的资源解析程序。
TagManager 基于JCR会话,如果这是基于JCR的资源解析程序。
UserManager UserManager提供对可授权对象(即用户和组)的访问和维护方法。 UserManager绑定到特定会话。
可授权 当前用户。
用户 当前用户。
QueryBuilder
外置器 用于外部化绝对URL,即使没有请求对象。
尚未目标,但实现了Adaptible(适应性),可用作自定义AdapterFactory中的源。
ContentHandler (XML) 如果这是一个吊带重写者的回应。

WCM

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

安全

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

DAM

资产会 调整为:
资产的资源。
资产的节点。
...
资产资源可以调整的所有内容。

标记

标签 适应于:
标记的资源。
标记的节点。
...
标记资源可以调整的所有内容。

其他

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