我一直在玩這個遊戲一段時間了,我想我幾乎已經破解了它,但我仍然不完全滿意我的解決方案。AEM/Sling中的自定義JSON渲染器
所以,我想要做的是,有一段內容,一個項目列表,它有兩個視圖:標準的HTML視圖,所以人們可以查看和編輯它;然後爲其他服務使用JSON端點。
首先,我認爲這是創建兩個JSP腳本來呈現內容的簡單的事情:
- /apps/my-stuff/components/list-page/html.jsp
- /應用/我-stuff /組件/列表頁/ json.jsp
但是Apache的吊索DefaultServlet
似乎是相當無知的json.jsp
腳本。
作爲第二次嘗試,我創建了另一個腳本,它將在/apps/foundation/components/primary/cq/Page/json.jsp
中實際調用,並呈現該頁面,如我所料。但是有一些關於這方面的擔心/問題:
- 首先,爲什麼這被系統所尊重,而不是更具體的地方呢?
- 的文檔狀態,即以找到適當的渲染器,第一
sling:resourceType
將被檢查,然後sling:resourceSuperType
然後,僅作爲後備將jcr:PrimaryType
檢查。不過,我認爲這是:jcr:PrimaryType
,然後DefaultServlet
,然後所有其他的事情。 - 然而,最令人擔憂的是,我不得不承認,這是相當普遍的,所以它會打破
jcr:PrmaryType = Page
的所有contnet,所以可能會有一些副作用。
解決方案可能會創建一個新類型:ListPage extends Page
;然後在/apps/foundation...
中爲此創建一個渲染器。不過,我有這種不好的感覺,這可能會引入其他問題。
所以我的問題是雙重的:什麼是這樣做的正確方法,和/或那我從URL的方式缺失 - >腳本分辨率在AEM /吊索工作。 (因爲它似乎是略有不同的是描述here和here)
(很明顯,我想保持默認的JSON渲染爲其他頁面,因爲這可能需要在頁面其他的事情。我甚至不當然,改變這一頁不會破壞這個特定頁面的UI ...)