1

我已经使用 Sidekick >Page properties>Images 选项卡为我的页面配置了图像。现在我想在我的一个 jsp 中获取我的这个页面图像(缩略图)。有人可以给我可以用来实现此目的的 api 类和方法的指针或代码片段。

谢谢,拉吉夫

4

2 回答 2

2

我建议使用默认图像组件作为示例 - /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);

其余的都是一样的——你只是给它一个不同的起点。

于 2013-04-18T20:53:27.340 回答
0

我认为 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 中获得与第一部分相同的结果,您需要将其包装在一个选择中,因为在发送到视图之前将其通过一些处理可以更容易地设置默认值。

于 2014-02-18T14:42:27.813 回答