在父节点吊索模型中获取基础组件 属性

Get foundation component property in parent node sling model

我刚开始使用 Sling 模型,但在父模型中检索子节点 属性 时遇到问题。 Here is my JCR structure

图像节点来自基础组件。 我的目标是在 Topbanner 节点中获取图像组件的 "filerefernce" 属性,然后在其可见的脚本中。 这是我的 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 

我得到的错误是 标识符 Mypackage.models.TopBanner 无法通过 Use API

正确实例化

如果您的目标是获得 '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.
        }
    }

也添加到您的 class 注释中:

@Model(adaptables = { SlingHttpServletRequest.class })

使用@ChildResource注释

  @ChildResource
  @Named("image") //Child node name
  private Resource childResource;

  private String imagePath;

  public String getImagePath() {
    return imagePath;
  }

  @PostConstruct
  public void init() {
    imagePath = childResource.getValueMap().get("fileReference", String.class);
  }

使用

检索Sightly/HTL标记中的图像路径
<div data-sly-use.model="package.name.TopBanner">
  <img src="${model.imagePath}"/>
</div>

根据 Sling documentation 文档的另一种方法是使用 @Via 注释,因为 Sling 模型 API 1.3.4.

文档中的示例,

@Model(adaptables=Resource.class)
public interface MyModel {

    // will return resource.getChild("jcr:content").getValueMap().get("propertyName", String.class)
    @Inject @Via(value = "jcr:content", type = ChildResource.class)
    String getPropertyName();

}