【问题标题】:CQ5 CRX JCR - Node Iterating - How to rename node?CQ5 CRX JCR - 节点迭代 - 如何重命名节点?
【发布时间】:2013-03-30 01:05:53
【问题描述】:

使用 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 堆栈中的哪个位置找到此功能,因为这将非常有帮助。

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

【问题讨论】:

    标签: content-management-system aem jcr sling


    【解决方案1】:

    要重命名 JCR 节点,您可以将它们移动到不同的路径,您可以使用需要调用 save() 的 Session.move(...) 或立即起作用的 Workspace.move(...)。

    我不确定它们是否以及如何干扰当前的 NodeIterator - 如果有问题,您可以使用迭代将要重命名的节点的路径添加到列表中,然后对其进行迭代在 NodeIterator 之外列出以重命名节点。

    【讨论】:

      【解决方案2】:
      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();
      }
      

      【讨论】:

        猜你喜欢
        • 2018-07-22
        • 2015-12-17
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多