我有一个小部件,它创建一个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可以实现OOTB吗?
问候。
答案 0 :(得分:0)
如果您使用的是CQ 5.6或5.6.1,则可以通过在其值中传递尾随星,使用单个请求将“:applyTo ”请求参数用于delete multiple items。 / p>
例如,要删除'/ content / foo'的所有子项,请使用':operation'='delete'和':applyTo'='/ content / foo / *'发出POST请求。
$ curl -F":operation=delete" -F":applyTo=/content/foo/*" http://host/content/sample
这是在Sling 2.1.2中引入的,因此在CQ 5.5及以下版本中不可用,因为5.5在2.1.1上运行。
对于5.5,我怀疑你可能需要获取子列表,然后在添加新节点之前将绝对URL传递给:applyTo作为删除它们的值。
答案 1 :(得分:0)
我使用的解决方案是使用@Delete后缀。 它的问题是您需要为要删除的每个节点添加一个带@Delete后缀的参数。我正在做的是提前查询节点,检查节点I的所有子节点是否更新并为每个节点添加@Delete参数。
所以,如果JCR最初有
-node
\node1
\node2
\node3
我将首先获得http://example.com/content/node.json并遍历json。最后,我将发送一个请求
./sling:resourceType:app/component
./value:value
./node1@Delete
./node2@Delete
./node3@Delete
./node1/value:value1
./node2/value:value2
将在同时删除node3的同时更新node1和node2。