CQ - 检查资源对象是否有效

时间:2015-06-25 11:22:54

标签: cq5 jcr sling

我需要检查资源对象是否对以下“资源”对象有效。例如,如果我在这种情况下传递任何类似getResource("some path which is not available in cq")的网址,我需要限制它

Resource resource= resourceResolver.getResource(/content/rc/test/jcr:content");
Node node = resource.adaptTo(Node.class);
String parentPagePath= node.getProperty("someproperty").getValue().getString();

有什么办法吗?

2 个答案:

答案 0 :(得分:8)

如果您使用getResource,则无效检查就足够了。如果您使用resolve,则必须使用!ResourceUtil.isNonExistingResource(resource)。 在节点级别,您可以使用hasProperty检查是否存在属性。

答案 1 :(得分:3)

正如Thomas所说,如果您提供的路径不存在,ResourceResolver.getResource()将返回null。对资源进行空检查可以解决您的问题。

Resource resource= resourceResolver.getResource("some path which is not available in cq");
if(resource != null){
Node node = resource.adaptTo(Node.class);
String parentPagePath= node.getProperty("someproperty").getValue().getString();
}

只是旁注: 除非有令人信服的理由,否则主要更好地使用包装器而不是使用较低级别的API。

因此,我建议您处理ValueMap(Sling API)来检索/设置Node的属性,而不是处理Node(JCR API)

Resource resource= resourceResolver.getResource("some path which is not available in cq");
    if(resource != null){
    ValueMap mapWithAllTheValues = resource.adaptTo(ValueMap.class);
    String parentPagePath= mapWithAllTheValues.get("someproperty", String.class);
    }

参考: https://docs.adobe.com/docs/en/cq/5-6-1/javadoc/org/apache/sling/api/resource/ResourceResolver.html#getResource(java.lang.String)