当前位置: 首页 > 知识库问答 >
问题:

如何使用Extjs制作一个新的jcr:内容节点?

袁安志
2023-03-14

我的CQ5中的一些页面。5.申请没有“jcr:content”节点。由于节点不存在,这些特定页面的属性不存在,用户无法修复。我想添加一个按钮,允许用户在缺少节点时添加节点。我已经能够添加一个按钮“Fix Properties”,它附带了一个自定义函数来检索现有节点,并且我能够检查jcr:content节点是否存在。我在任何地方都找不到关于如何从头创建节点的文档。我想这是一件很平常的事,但几乎找不到什么。

我发现这是一个关于节点的文档,大多数函数都可以工作,但到目前为止还没有骰子:http://dev.day.com/docs/en/cq/current/widgets-api/index.html?class=CQ.Ext.data.Node

到目前为止,我们有这个功能。每次尝试都是分开进行的:

CQ.wcm.SiteAdmin.createProperties = function() {
   var path = this.getCurrentPath();
   var tree = CQ.Ext.getCmp(this.id + "-tree");
   //var nodet = tree.getSelectionModel().getSelectedNode(); //gets the selected node
   //nodet.childNodes[i] skips over jcr:content nodes
   var nodej = CQ.Util.eval(path + '.2.json'); //am currently using this to get the node data instead
   if(typeof nodej['jcr:content'] == 'undefined')  //If the jcr:content node does not exist
   {
     //Attempt 1: 
       nodej['jcr:content'] = new CQ.wcm.Node({ 
           jcr:primaryType: "cq:PageContent",
           jcr:title: "title"});
     //Attempt 2: 
       nodej['jcr:content'] = new Node({  //Note no 'CQ.wcm'
           jcr:primaryType: "cq:PageContent",
           jcr:title: "title"});
     //Attempt 3:
     nodej.appendChild( new CQ.wcm.Node({ 
           jcr:primaryType: "cq:PageContent",
           jcr:title: "title"}));
     //Attempt 4:
     nodej.appendChild( new CQ.wcm.Node({ 
           Name : "jcr:content",              
           jcr:primaryType: "cq:PageContent",
           jcr:title: "title"}));
    }

};

上述尝试都没有任何作用,但这是我能想到的最接近的事情。

我确实发现了这个问题:如何通过CQ. extjs向JCR节点添加新属性?但是它没有任何可见的功能,它也是关于添加到现有节点的。

共有1个答案

陆宏扬
2023-03-14

您所有的尝试都会修改Javascript对象nodej,但是没有自动在存储库中反映这些更改的机制。这就是更改未保存的原因。要创建新节点,需要发送HTTP POST请求:

CQ.HTTP.post(path + "/jcr:content", null, {
  "jcr:primaryType" : "cq:PageContent",
  "jcr:title" : "Title"
});

这个请求将由Sling框架(更准确地说,是SlingPostServlet)处理,它将创建一个新的资源。

旁注:请注意,如果包含特殊字符,则需要在Javascript关联数组中引用key name,如。因此,以下代码将起作用:

console.log({
    "jcr:primaryType" : "cq:PageContent"
});

但这会导致语法错误:

console.log({
    jcr:primaryType : "cq:PageContent"
});
 类似资料:
  • 使用JcrUtil时。createPath要在AEM的DAM资产中创建文件夹(目录),将引发异常,错误为OakConstraint0025:/content/DAM/upload/Type/99/MBT/front[[nt:file]]:强制子节点jcr:在新节点中未找到内容。这可能意味着子jcr:content节点需要与目录同时创建。所以我真的不知道如何解决这个问题。 我确实遵循了这个JCRUt

  • 我有一个下拉列表,其中选项的值是,,等。最后一个是父节点的属性,比如是节点的属性 你知道如何以这种方式获得价值吗。 谢谢

  • 我在Jackrabbit节点内容从一个路径移动到另一个路径时遇到了问题。 尝试将节点下的文档列表(从jcr中的临时节点)移动到新路径(新节点,不包含任何文档)。 节点是混合类型的。 以下是创建文档节点的部分代码片段: 节点类型说明: 希望使用jcr api本身移动内容,而不是让所有子节点迭代并移动到目标文件夹。 使用Jackrabbit core 2.6.0和JCR 2.0。

  • 我想搜索CQ5.6(AEM)实例中包含的JCR存储库中包含给定字符串的所有文件。由于对JCR对XPath(或JCR-SQL2)的解释不熟悉,我在表达查询方面不太成功。 这将得到我所有的文件: 这就是我希望如何限制上面包含的文件列表: 类型为。以上这些似乎都不起作用。我哪里做错了?

  • 问题内容: 我有一些数据结构,我想将其中一个用作临时结构,将另一个用作非临时结构。 现在的问题当然是实际上只是指向,因此一旦清除,也是如此。 如何在使用Java时保留值? 问题答案: 您可以使用以下技巧: 或使用 您可以在此处获取有关clone()方法的一些信息 但是您应该记住,所有这些方式都会给您 List 的副本,而不是其所有元素。因此,如果您更改复制的列表中的元素之一,则它也将在原始列表中进

  • 我有以下片段类: 它更新玩家货币的UI显示。但是,由于后台运行着许多不同的进程,因此此线程滞后并出现问题。我如何在单独的线程上运行它以避免这种情况? 编辑:我尝试了这样的东西: 但这没用! 谢啦!