Aem 在单个请求中用子节点替换节点

Aem 在单个请求中用子节点替换节点,aem,sling,Aem,Sling,我有一个小部件,它创建一个POST请求,创建一个节点和动态数量的子节点,如: ./sling:resourceType:app/component _charset_:utf-8 :status:browser ./data:data ./a/a:one ./a/b:two ./b/a:one ./b/b:two 这第一次效果不错。我得到一个节点以及子节点a和b。 问题在于后续的请求。我需要在创建新的子节点之前删除所有子节点。因此,如果之前我创建了子节点a、b、c和d,那么之前的请求将只剩下子

我有一个小部件,它创建一个POST请求,创建一个节点和动态数量的子节点,如:

./sling:resourceType:app/component
_charset_:utf-8
:status:browser
./data:data
./a/a:one
./a/b:two
./b/a:one
./b/b:two
这第一次效果不错。我得到一个节点以及子节点a和b。 问题在于后续的请求。我需要在创建新的子节点之前删除所有子节点。因此,如果之前我创建了子节点a、b、c和d,那么之前的请求将只剩下子节点a和b

我知道后缀@Delete,但我需要提前知道哪些子节点需要删除,而我不知道

这可以通过Sling Post Servlet实现吗


问候。

如果您使用的是CQ 5.6或5.6.1,您可以使用“:applyTo”请求参数,通过在其值中传递一个尾随星来使用单个请求

例如,要删除“/content/foo”的所有子项,请使用“:operation“=”delete”和“:applyTo”=”/content/foo/*”发出POST请求

$ curl -F":operation=delete" -F":applyTo=/content/foo/*" http://host/content/sample
这是在中引入的,因此在CQ 5.5及以下版本中不可用,因为5.5在2.1.1上运行


对于5.5,我想在添加新节点之前,您可能需要获取子节点列表,然后将绝对URL传递给:applyTo作为删除它们的值。

我使用的解决方案是使用@delete后缀。 问题是,对于每个要删除的节点,都需要添加一个带有@Delete后缀的参数。我要做的是提前查询节点,检查我要更新的节点的所有子节点,并为每个子节点添加@Delete参数

因此,如果JCR最初有

-node
 \node1
 \node2
 \node3
我将首先获取并遍历json。最后,我将发送一个请求

./sling:resourceType:app/component
./value:value
./node1@Delete
./node2@Delete
./node3@Delete
./node1/value:value1
./node2/value:value2

这将在同时删除节点3的同时更新节点1和节点2。

是否可以删除父节点,从而删除整个树,然后您的请求将创建新结构?@rakhi4110如果我执行以前的请求,当然可以。但我希望保持原子性。不幸的是,这需要一个请求来删除现有节点,另一个请求来创建新节点。如果由于某种原因,第二个请求没有执行,我将一无所获。