【问题标题】:How to check page contains a particular resource or not in cq5?如何在 cq5 中检查页面是否包含特定资源?
【发布时间】:2015-08-15 19:49:56
【问题描述】:

我想检查我的页面是否包含特定资源。如果资源仅在页面上出现一次,则可以使用检查

page.getContentResource("yourResource");

如果为 null 表示资源不存在。但问题是我的页面上有多个资源。比如 yourResource_1、yourResource_2、yourResource_3 ... 如果我删除了 yourResource 但我仍然有 yourResource_1、yourResource_2、yourResource_3。然后我也返回 null 因为它只检查“yourResource”

有什么建议吗?

【问题讨论】:

    标签: aem sling


    【解决方案1】:

    小提示,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;
    }
    

    【讨论】:

    【解决方案2】:

    您可以 adaptTo() ValueMap 并检查地图是否有任何属性,即 isEmpty():

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-06-19
        • 2019-07-14
        • 2011-07-15
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 2015-06-24
        相关资源
        最近更新 更多