我有一个需要共享的页脚元素。我的计划是在父/主页上设置页脚,但允许子页面覆盖这些属性。
我首先查看属性的当前组件(非常标准),之后我获取父页面的路径,以查找具有相同名称的组件上的属性。
function getProperty(property, currentPage) {
var val = null,
page = currentPage,
rootPage = page.getAbsoluteParent(2);
var curNode = currentNode.getPath(),
nodeStrIdx = curNode.indexOf("jcr:content"),
nodeStr = curNode.substr(nodeStrIdx + 12); // Remove 'jcr:content/' too
while(val == null) {
// If we've gone higher than the home page, return
if(page.getDepth() < 3) {
break;
}
// Get the same node on this page
var resource = page.getContentResource(nodeStr);
if(resource != null) {
var node = resource.adaptTo(Node.class); // *** This is null ***
// val = node.get(property);
}
// Get the parent page
page = page.getParent();
}
return val;
}
我已经看到你可以将内容资源的类型更改为一个节点,该节点应该允许我获得相同的property
,但resource.adaptTo(Node.class)
返回null。
如果不清楚,resource
是我要从中提取属性的节点的绝对路径,例如/content/jdf/en/resources/challenge-cards/jcr:content/footer/follow-us
答案 0 :(得分:2)
假设您正在使用Javascript HTL Use API,则需要为Java类使用完全限定名称,如下所示:
var node = resource.adaptTo(Packages.javax.jcr.Node);
然后你可以用这种方式检索你的价值:
if (node.hasProperty(property)) {
val = node.getProperty(property).getString();
}
当缺少某个媒体资源时,您需要按hasProperty
getProperty
方式使用PathNotFoundException
方法adaptTo
投掷nativeResource
。您还需要注意示例中的granite.resource对象 - 它不是相同的Resource对象,也没有var node = granite.resource.nativeResource.adaptTo(Packages.javax.jcr.Node);
方法。要获取组件的原始资源,您需要使用val = resource.properties[property];
属性:
//importClass(Packages.com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap);
//this import might be needed but not necessarily
var props = new HierarchyNodeInheritanceValueMap(granite.resource.nativeResource);
val = props.getInherited(property, Packages.java.lang.String);
但是,还应该有更快的方法从JS中的资源获取属性:
val
由于这是开发组件属性继承的一种非常常见的情况,您还可以在实现设计中考虑一些现成的解决方案,如Node API或HierarchyNodeInheritanceValueMap API。
由于这个JS是使用Inheritance Paragraph System (iparsys)进行服务器端编译的,因此这里使用的所有这些对象和方法都是Java对象和方法,因此您也应该能够以这种方式使用HierarchyNodeInheritanceValueMap:
explorer.newFile
然后它将返回df
当前资源的属性值,如果为空,则返回父页面上相同位置的资源的属性值,或者如果为空等等。这两行应该那么做所有的魔术。