我正在研究一个名为“tabbedcarousel”的轮播组件,我需要遍历它的子节点以访问图像属性。见下图:
“tabbedimagecarouselunselectedimage”->“fileReference”是我需要得到的。
假设我目前正在研究“tabbedcarousel.jsp”,我可以访问我的 currentNode,所以我假设获取深子 img 属性的方式是这样的:
<%
NodeIterator tabbedCarouselChildNodes = currentNode.getNodes();
while(tabbedCarouselChildNodes.hasNext()){
Node parNode = tabbedCarouselChildNodes.nextNode();
NodeIterator parChildNodes = parNode.getNodes();
while(parChildNodes.hasNext()){
Node tabbedCarouselItemNode = parChildNodes.nextNode();
NodeIterator tabbedCarouselItemChildNodes = tabbedCarouselItemNode.getNodes();
while(tabbedCarouselItemChildNodes.hasNext()){
Node tabImgNode = tabbedCarouselItemChildNodes.nextNode();
%>
test here s the img property : <%= tabImgNode.getProperties("fileReference").toString()%> !!!
<%
}
}
%>
但它不起作用。希望有人能给我一些建议。谢谢
最佳答案
我在最后添加了一个大括号,并用 tabImgNode.getProperties()
/hasProperty()
组合替换了 getProperty()
。在我的 CQ 上工作正常:
<%
NodeIterator tabbedCarouselChildNodes = currentNode.getNodes();
while(tabbedCarouselChildNodes.hasNext()) {
Node parNode = tabbedCarouselChildNodes.nextNode();
NodeIterator parChildNodes = parNode.getNodes();
while(parChildNodes.hasNext()){
Node tabbedCarouselItemNode = parChildNodes.nextNode();
NodeIterator tabbedCarouselItemChildNodes = tabbedCarouselItemNode.getNodes();
while(tabbedCarouselItemChildNodes.hasNext()){
Node tabImgNode = tabbedCarouselItemChildNodes.nextNode();
if (!tabImgNode.hasProperty("fileReference")) {
continue;
}
%>
test: <%= tabImgNode.getProperty("fileReference").getString()%>
<%
}
}
}
%>
顺便说一句,它可以使用 Sling API 重构:
<%
Iterator<Resource> items = resource.getChild("par").listChildren();
while (items.hasNext()) {
Resource property = items.next().getChild("tabimageunselectedimage/fileReference");
if (property == null) {
continue;
}
%>
fileReference: <%= property.adaptTo(String.class) %>
<% } %>
第三个选项是使用名为 SlingQuery 的第三方库:
<% for (Resource r : SlingQuery.$(resource).find("#tabimageunselectedimage")) { %>
path: <%= r.adaptTo(ValueMap.class).get("fileReference") %>
<% } %>
关于jsp - CQ 从当前节点(当前组件)访问深子节点的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24282510/