【问题标题】:how can I get the asset path of a given rendition from in Java file in AEM?如何从 AEM 的 Java 文件中获取给定再现的资产路径?
【发布时间】:2018-05-16 11:23:33
【问题描述】:

我想在我的 html 页面中将我的图像资产的“cq5dam.thumbnail.140.100.png”再现显示为缩略图。 对于给定的再现,如何在 java/JSP 中的 DAM 中获取我的一项资产的资产路径

【问题讨论】:

    标签: jsp aem dam


    【解决方案1】:

    这个函数可以解决问题

    public static String getImageAssetPath(SlingHttpServletRequest slingRequest,String actualDamPath,String renditionParam,String defaultPath) {
        try {
            if(StringUtils.isNotEmpty(actualPath)){
                  Resource resource = slingRequest.getResourceResolver().getResource(actualPath);
                  Asset asset = resource.adaptTo(Asset.class);
                  String imageAssetPath = asset.getRendition(renditionParam).getPath();
                  LOGGER.info("imageAssetPath for given rendition: " + imageAssetPath);
                  return imageAssetPath;
           }
    
        } catch (Exception e) {
            LOGGER.error(e.getMessage());
        }
    
        return defaultPath;
    }
    

    把这个函数放在一个标签库中,这样你的jsps中也可以使用它

    ${mytaglib:getAssetPath(slingRequest,property.previewImage,'cq5dam.thumbnail.140.100.png','')}
    

    【讨论】:

    • 只是因为很多人只是从 SO 中复制和粘贴代码。此代码至少包含三个可能的NullPointerExceptions。如果此路径上没有资源,getResource() 可能会返回 null。如果给定资源不是资产,adaptTo 将(静默)返回 null,如果资产没有具有该确切名称的再现,getRendition() 也将返回 null
    • 在所有这些情况下,它将正确返回 defaultPath!
    • 这是真的,但仅仅捕捉Exception 被认为是不好的做法,我敢打赌你的声纳(或你在公司使用的任何代码质量工具)也会抱怨。为什么不首先编写极少产生异常的代码呢?反正。关键是我想告诉人们,他们不应该只是盲目地复制这段代码,而是要注意可能的 NPE。
    • 知道了 Jen,谢谢,这并不是一个生产就绪代码:p
    猜你喜欢
    • 2011-04-25
    • 2017-01-11
    • 2013-08-03
    • 1970-01-01
    • 2019-02-20
    • 2014-05-19
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多