为了账号安全,请及时绑定邮箱和手机立即绑定

以编程方式排列 aem 6.4 中的内容

以编程方式排列 aem 6.4 中的内容

暮色呼如 2022-08-17 17:06:30
每个人 都。我是新接触 .我正在使用 .我的任务是根据 JSON 文件的内容以编程方式对 in 的内容进行排序。JSON 文件的内容应设置为初始子项,而不是按其创建日期排序的子项。aemaem 6.4cq:projectaem这是我的.如果子 2 是 JSON 文件中指示的子 2,则它应该是第一个显示的子 2。JSON 文件的内容只是一个子级的名称,因此即使有 10 个子级,JSON 文件的内容也应始终是列表中的第一个子项。cq:page我花了几个小时研究如何实现这一点,尽管我仍然找不到任何解决方案。关于我应该如何创建它的任何见解?谢谢!
查看完整描述

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的一般想法。


查看完整回答
反对 回复 2022-08-17
?
慕少森

TA贡献2019条经验 获得超9个赞

这可能会有所帮助 -

  1. 从父节点获取子节点。(你会得到“迭代器”将其转换为此处列表 - 将迭代器转换为数组列表)

  2. 立即删除所有子节点。并保留上述列表的备份。循环访问列表,确定要首先放置的节点(通过标题或其他一些属性)将其添加到单独的集合(LinkedHashSet-以保持顺序)。

  3. 现在,在上面的集合中的特定节点之后,以相同的顺序添加剩余的项目/节点。(您可能需要再次循环访问)

  4. 现在,此集具有节点/资源,按您想要的顺序排列,迭代,创建节点并保存更改。


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号