我有一個創建,創建一個節點和子節點的動態數字,就像一個POST請求的部件與子節點一起更換節點。我得到一個節點以及子節點a和b。 問題出在隨後的請求中。我需要在創建新的子節點之前刪除所有的子節點。因此,如果以前我創建了子節點a,b,c和d,則以前的請求只會導致子節點a和b保留。在單個請求
我知道後綴@刪除,但我需要事先知道哪些子節點需要刪除,我不知道。
使用Sling Post Servlet可以實現OOTB嗎?
問候。
我有一個創建,創建一個節點和子節點的動態數字,就像一個POST請求的部件與子節點一起更換節點。我得到一個節點以及子節點a和b。 問題出在隨後的請求中。我需要在創建新的子節點之前刪除所有的子節點。因此,如果以前我創建了子節點a,b,c和d,則以前的請求只會導致子節點a和b保留。在單個請求
我知道後綴@刪除,但我需要事先知道哪些子節點需要刪除,我不知道。
使用Sling Post Servlet可以實現OOTB嗎?
問候。
我使用的解決方案是使用@Delete後綴。 問題在於,您需要爲每個要刪除的節點添加一個帶有@Delete後綴的參數。我在做的事情是提前查詢節點,檢查我正在更新的節點的所有子節點,併爲它們中的每一個添加@Delete參數。
所以,如果JCR原本有
-node
\node1
\node2
\node3
我會先得到http://example.com/content/node.json和遍歷JSON。最後,我會發送一個請求
./sling:resourceType:app/component
./value:value
./[email protected]
./[email protected]
./[email protected]
./node1/value:value1
./node2/value:value2
將更新節點1和節點2,同時刪除節點3。
如果您使用CQ 5.6或5.6.1可以使用「:applyTo」請求參數delete multiple items使用單個請求通過使在其值尾隨星。例如,要刪除'/ 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作爲刪除它們的值。
不幸的是,這將需要一個請求來刪除現有的節點,第二個創建新的節點。如果由於某種原因沒有執行第二次請求,我最終什麼都沒有。 – santiagozky
是不是可以刪除父母,這將刪除整個樹後,你的請求會創建新的結構? – rakhi4110
@ rakhi4110如果我做了以前的請求,當然。但我想保持原子。 – santiagozky