提问者:小点点

如何在cq5中检查页面是否包含特定资源?


我想检查我的页面是否包含特定资源。如果资源在页面上只有一次,那么可以使用

page.getContentResource("yourResource");

如果它为空意味着资源不存在。但问题是我的page.like上有多个资源yourResource_1,yourResource_2,yourResource_3…如果我删除了yourResource,但我仍然有yourResource_1,yourResource_2,yourResource_3。然后我也返回null,因为它只检查"yourResource"

有什么建议吗?


共3个答案

匿名用户

如果您不知道页面的jcr: content节点的所有潜在子资源的名称,您可以使用下面的片段检查jcr:content节点是否有任何子节点。

import javax.jcr.Node

boolean hasChildren = page.getContentResource().adaptTo(Node.class).hasNodes();

匿名用户

小提示,getContentResource只返回jcr: content的直接子项,尽管您可以使用par/yourResource之类的相对路径。我认为唯一的方法是递归钻取资源并检查资源类型。这一行的东西(未经测试):

private boolean checkType(Resource res) {
    if (res.isResourceType("yourResource") {
        return true;
    }
    boolean hasType = false;
    Iterator<Resource> children = res.listChildren();
    while (children.hasNext()) {
        hasType |= checkType(children.next());
    }
    return hasType;
}

匿名用户

您可以适配To()ValueMap并检查地图是否具有任何属性,即isCounty():