2 回答
TA贡献1898条经验 获得超8个赞
据我所知,您希望一种方法来命令一个命名的子级成为列表中的第一个。cq:Page
这是可能的,因为 cq:Page 是一个可排序的节点。否则,这是不可能的。您可以在CRX资源管理器中检查任何节点类型。
我认为添加有关JSON的一点会使问题复杂化。您只需要一个简单的方法,如下所示:
private void orderAsFirstChild(String childName, Node parentNode) throws RepositoryException {
if (parentNode.hasNode(childName)) {
// find current first child name
String firstChildName = Optional.ofNullable(parentNode.getNodes())
.map(NodeIterator::nextNode)
.map(node -> {
try {
node.getName();
} catch (RepositoryException e) {
e.printStackTrace();
}
return (String) null;
}) //
.orElse(null);
parentNode.orderBefore(childName, firstChildName);
}
}
你可能应该稍微清理一下,但这是使用Node#orderBefore的一般想法。
TA贡献2019条经验 获得超9个赞
这可能会有所帮助 -
从父节点获取子节点。(你会得到“迭代器”将其转换为此处列表 - 将迭代器转换为数组列表)
立即删除所有子节点。并保留上述列表的备份。循环访问列表,确定要首先放置的节点(通过标题或其他一些属性)将其添加到单独的集合(LinkedHashSet-以保持顺序)。
现在,在上面的集合中的特定节点之后,以相同的顺序添加剩余的项目/节点。(您可能需要再次循环访问)
现在,此集具有节点/资源,按您想要的顺序排列,迭代,创建节点并保存更改。
添加回答
举报
