我已经使用 Sidekick >Page properties>Images 选项卡为我的页面配置了图像。现在我想在我的一个 jsp 中获取我的这个页面图像(缩略图)。有人可以给我可以用来实现此目的的 api 类和方法的指针或代码片段。
谢谢,拉吉夫
我已经使用 Sidekick >Page properties>Images 选项卡为我的页面配置了图像。现在我想在我的一个 jsp 中获取我的这个页面图像(缩略图)。有人可以给我可以用来实现此目的的 api 类和方法的指针或代码片段。
谢谢,拉吉夫
我建议使用默认图像组件作为示例 - /libs/foundation/components/image。
但是,如果您要将代码放入特定页面类型的组件中,则代码应如下所示:
if (currentNode.hasNode("image")) {
String imagePath = currentNode.getNode("image").getPath();
Resource imageRes = resourceResolver.getResource(imagePath);
image = new Image(imageRes);
image.loadStyleData(currentStyle);
image.setSelector(".img");
if (!currentDesign.equals(resourceDesign)) {
image.setSuffix(currentDesign.getId());
}
image.draw(out);
}
但请记住,即使您设置了图像,也并不意味着它会显示 - 如果您使用页面属性的默认页面对话框,它只会显示损坏的图像。这是因为 CQ 中存在一个错误,即图像的 sling:resourceType 属性未设置,因此不会显示。这是因为放在图像上的 .img 选择器不知道要做什么,除非它被指向具有 .img 选择器定义的资源类型,因此它可以正确渲染图像。
我上传了一个包,您可以将其用作默认 /libs/foundation/components/page 组件对话框问题的修补程序,以便在您上传图像时实际设置资源类型。您可以从我的Google Drive中找到/下载该软件包
希望这会有所帮助。如果您需要更多帮助,请告诉我。
编辑
如果您尝试从另一个页面上的一个页面获取页面属性图像,您只需要使用资源解析器。你应该在 CQ 中有一个可用的,所以这基本上是代码:
Resource imageRes = resourceResolver.getResource(pathFromYourDialog);
Image image = new Image(imageRes);
其余的都是一样的——你只是给它一个不同的起点。
我认为 Nicholaus 的 EDIT 回答更符合您的迫切需求。如果用户通过对话框(即 DAM 图像)为您提供缩略图的路径。
您可以简单地创建图像,或者如果它具有 DAM 信息,您可以将其作为 DAM 资产加载并提取必要的信息。
Image image = new Image();
Resource imageResource = resourceResolver.getResource(imageUrl);
Asset imageAsset = imageResource.adaptTo(Asset.class);
Map<String, Object> valueMap = imageAsset.getMetadata();
long width = Long.parseLong(valueMap.get("tiff:ImageWidth").toString());
long height = Long.parseLong(valueMap.get("tiff:ImageLength").toString());
Object titleObject = valueMap.get("tiff:ImageTitle");
String title = (titleObject == null) ? null : titleObject.toString();
if (title != null)
{
image.setTitle(title);
}
image.setWidth(width);
image.setHeight(height);
image.setUrl(imageUrl);
对于 Nicholaus 的建议,这有点冗长,Image 类将根据您传递的 Resource 创建自己。(实际上为此支持 Nicholaus,我们可以进行一些优化)。
另一个更简单的选择是只使用用户通过的 src,如果您所做的只是设置缩略图。我猜您可以安全地执行以下操作:
在java中:
String thumbSrc = properties.get("thumbSrc", "defaultThumbnail.path");
if (!thumbSrc.isEmpty())
{
pageContext("thumbSrc", thumbSrc);
}
在jsp中:
<img alt="thumbnail" src="${thumbSrc}"/>
或者如果你不想在java中做任何事情,你可以做类似的事情
<c:if test="${not empty properties.thumbSrc}">
<img alt="thumbnail" src="${properties.thumbSrc}"/>
</c:if>
为了在 jsp 中获得与第一部分相同的结果,您需要将其包装在一个选择中,因为在发送到视图之前将其通过一些处理可以更容易地设置默认值。