首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Sling模型注入另一个Sling模型

从Sling模型注入另一个Sling模型
EN

Stack Overflow用户
提问于 2016-09-20 12:31:20
回答 2查看 6.9K关注 0票数 1

2给出吊索模型,我想注射其中之一。通过注释可以这样做吗?还是我需要创建一个PostContruct方法作为解决办法?

示例:

模型A

代码语言:javascript
复制
@Model(adaptables = Resource.class)
public class ModelA { 
   @ValueMapValue(name = "jcr:title", injectionStrategy = InjectionStrategy.OPTIONAL)
   private String title;

   @Inject // Not working! 
   private ModelB modelB;
}

B型

代码语言:javascript
复制
@Model(adaptables = Resource.class)
public class ModelB { 
   @ValueMapValue(injectionStrategy = InjectionStrategy.OPTIONAL)
   private String text;

}
EN

回答 2

Stack Overflow用户

发布于 2016-09-23 09:39:41

从1.1.0版本的Sling模型开始,您可以使用@Self注释来注入模型,这些模型可以根据当前的适应性进行调整。在本例中,来自Resource of ModelA

注入适应性对象本身(如果字段的类匹配或是超级类型)。如果存在@Self注释,则尝试使其适应字段类型。

代码语言:javascript
复制
@Model(adaptables = Resource.class)
public class ModelA { 
   @ValueMapValue(name = "jcr:title", injectionStrategy = InjectionStrategy.OPTIONAL)
   private String title;

   @Inject // This should works
   @Self
   private ModelB modelB;
}
票数 5
EN

Stack Overflow用户

发布于 2016-09-20 14:13:20

您将无法将ModelB注入到ModelA中,您可以做的是获取ModelA中的资源实例并使其适应ModelB。

代码语言:javascript
复制
@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class ModelA { 
   @Inject
   @Via("resource") 
   @Named("jcr:title")
   private String title;

   @Inject 
   private Resource resource;

  @PostConstruct
  public void init() {
   final ModelB modelb = resource.adaptTo(ModelB.class);
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39594183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档