CQ5 CRX JCR - 节点迭代 - 如何重命名节点?

时间:2013-03-30 01:05:54

标签: content-management-system cq5 jcr sling

使用Apache Sling和CRX / CQ5和JCR等时......

是否可以迭代JCR中的CQ5页面节点并重命名页面。

我目前有一个脚本可以更改特定路径下所有子页面中的属性。

我正在拼命寻找一种方法来使用NodeIterator和Node类来重命名特定路径中的每个页面(不仅是标题和任意属性,还有构成路径的名称)。

示例:

-content/xproject/shared/cars/a/abegro-assam
-content/xproject/shared/cars/m/motofuel-iss

我想做一些相当于:

的事情
while(cars.hasNext()) {
   Node node = cars.nextNode();

   //this is the functionality I want somehow...
   node.setName("some-other-name");

   //similar to how we would set JCR properties
   node.setProperty("someProperty", "someValue");
}

请告知我在CQ5 / Sling / Apache / CRX堆栈中可以找到此功能的地方,因为这将非常有用。

我知道我可以适应其他一些节点的其他类 - 但我非常不确定如何继续。

2 个答案:

答案 0 :(得分:4)

要重命名JCR节点,您可以将它们移动到另一个路径,您可以使用需要save()调用的Session.move(...)或立即执行的Workspace.move(...)。 p>

我不确定这些是否以及如何干扰当前的NodeIterator - 如果遇到问题,您可以使用迭代来添加要重命名为List的节点的路径,然后迭代在NodeIterator外部列出以重命名节点。

答案 1 :(得分:0)

void rename(Node node, String newName) throws RepositoryException 
{
    node.getSession().move(node.getPath(), node.getParent().getPath() + "/" + newName);
    // Don't forget - not necessarily here at this place:
    // node.getSession().save();
}