【发布时间】:2018-05-16 11:23:33
【问题描述】:
我想在我的 html 页面中将我的图像资产的“cq5dam.thumbnail.140.100.png”再现显示为缩略图。 对于给定的再现,如何在 java/JSP 中的 DAM 中获取我的一项资产的资产路径
【问题讨论】:
我想在我的 html 页面中将我的图像资产的“cq5dam.thumbnail.140.100.png”再现显示为缩略图。 对于给定的再现,如何在 java/JSP 中的 DAM 中获取我的一项资产的资产路径
【问题讨论】:
这个函数可以解决问题
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','')}
【讨论】:
NullPointerExceptions。如果此路径上没有资源,getResource() 可能会返回 null。如果给定资源不是资产,adaptTo 将(静默)返回 null,如果资产没有具有该确切名称的再现,getRendition() 也将返回 null。
Exception 被认为是不好的做法,我敢打赌你的声纳(或你在公司使用的任何代码质量工具)也会抱怨。为什么不首先编写极少产生异常的代码呢?反正。关键是我想告诉人们,他们不应该只是盲目地复制这段代码,而是要注意可能的 NPE。