AEM pathfield允许仅选择子页面
我有一个要求,AEM pathfield组件将只显示子级(cq:Page) )选项选择器中当前节点(cq:Page)的资源/节点。我浏览了文档,不确定过滤器选项是否有用AEM pathfield允许仅选择子页面,aem,aem-6,aem-touch-ui,Aem,Aem 6,Aem Touch Ui,我有一个要求,AEM pathfield组件将只显示子级(cq:Page) )选项选择器中当前节点(cq:Page)的资源/节点。我浏览了文档,不确定过滤器选项是否有用 @Component( service = Predicate.class, property = { "predicate.name= myPredicateName" } ) public class MyPredic
@Component(
service = Predicate.class,
property = {
"predicate.name= myPredicateName"
}
)
public class MyPredicate extends AbstractNodePredicate {
private static final LocalisedLogger LOG = LocalisedLoggerFactory.getLogger(MyPredicate.class);
@Override
public boolean evaluate(final Node node) {
LOG.log(Messages.DEBUG, "testing" + node.toString());
try {
return isInPredicate(node);
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
private boolean isInPredicate(final Node node) throws RepositoryException {
if (node.hasProperty("jcr:content/dog")) {
return true;
}
return false;
}
}
content.xml
<path
jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/coral/foundation/form/pathfield"
fieldLabel="Page Path"
predicate="[myPredicateName]"
emptyText="Select the carousels page"
name="./carouselsPagePath"
forceSelection="{Boolean}true"
required="{Boolean}true"/>
应该可以通过扩展com.day.cq.commons.predicate.AbstractNodePredicate来实现您自己的谓词。我至少从AEM 6.3开始就没有使用过它,但它应该仍然可以工作。请看一下我在这个问题中发布的代码片段,不幸的是,仅选择组件所在节点上的子节点可能很棘手。我理解这个接口的方式是,它作为一个访问者,在遍历内容树时在每个节点上运行。这是有道理的。知道如何在pathfield组件中使用该谓词吗?因为在cq对话xml中添加predicate=“myPredicateName”似乎不起作用。已经有一段时间了,但我认为该属性需要一个列表。试试predicate=“[myPredicateName]”
运气不好。我已经在问题中添加了代码。应该可以通过扩展com.day.cq.commons.predicate.AbstractNodePredicate
来实现您自己的谓词。我至少从AEM 6.3开始就没有使用过它,但它应该仍然可以工作。请看一下我在这个问题中发布的代码片段,不幸的是,仅选择组件所在节点上的子节点可能很棘手。我理解这个接口的方式是,它作为一个访问者,在遍历内容树时在每个节点上运行。这是有道理的。知道如何在pathfield组件中使用该谓词吗?因为在cq对话xml中添加predicate=“myPredicateName”似乎不起作用。已经有一段时间了,但我认为该属性需要一个列表。试试predicate=“[myPredicateName]”
运气不好。我已将代码添加到问题中。