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-以保持順序)。
現在,在上面的集合中的特定節點之后,以相同的順序添加剩余的項目/節點。(您可能需要再次循環訪問)
現在,此集具有節點/資源,按您想要的順序排列,迭代,創建節點并保存更改。
添加回答
舉報