首页 > 解决方案 > 获取父节点吊索模型中的基础组件属性

问题描述

我刚开始使用 Sling 模型,但在检索父模型中的子节点属性时遇到了问题。 这是我的 JCR 结构

图像节点是一个来自基础组件。我的目标是在 Topbanner 节点中获取图像组件的“文件引用”属性,然后在其漂亮的脚本中。这是我的顶级横幅节点模型:

@Model(adaptables=Resource.class)
public class TopBanner {



 @Self @Via("resource")
 private Resource bannerBackGroundImage;

 private String bannerBgImagePath;

 // @Inject 
 // private String bannerTitle;

 // @Inject 
 // private String bannerDescription;
 // 
 // @Inject 
 // private String bannerButtonText;
 // 
 // @Inject 
 // private String bannerButtonLink;

  @SlingObject
  private ResourceResolver resourceResolver;

  @PostConstruct
  public void init() {
    TopBanner.LOG.info("we are here");

    try {
bannerBackGroundImage=resourceResolver.getResource("/apps/ads/components/structure/TopBanner2/Image");
        this.bannerBgImagePath=bannerBackGroundImage.adaptTo(ValueMap.class).get("fileReference",String.class);
    } catch(SlingException e) {
        TopBanner.LOG.info("Error message  **** " + e.getMessage());
    }   

}
// getters omitted 

我得到的错误是 Identifier Mypackage.models.TopBanner 不能被 Use API 正确实例化

标签: aemslingjcrsling-models

解决方案


如果您的目标是获取“fileReference”,请尝试以下操作:

@Self
private SlingHttpServletRequest request;

@ValueMapValue(name = DownloadResource.PN_REFERENCE, injectionStrategy = InjectionStrategy.OPTIONAL)
private String fileReference;

然后让我们的资产使用如下:

if (StringUtils.isNotEmpty(fileReference)) {
        // the image is coming from DAM
        final Resource assetResource = request.getResourceResolver().getResource(fileReference);
        if (assetResource != null) {
            Asset asset = assetResource.adaptTo(Asset.class);
            //Work with your asset there.
        }
    }

还添加到您的类注释中:

@Model(adaptables = { SlingHttpServletRequest.class })

推荐阅读