【发布时间】:2017-08-07 11:41:41
【问题描述】:
我已经玩了一段时间了,我想,我已经 - 几乎 - 破解了它,但我仍然对我的解决方案并不完全满意。
所以,我想做的是拥有一段内容,一个项目列表,它有两个视图:标准的 HTML 视图,这样人们可以查看和编辑它;然后是供其他服务使用的 JSON 端点。
首先我认为创建两个 JSP 脚本来呈现内容很简单:
- /apps/my-stuff/components/list-page/html.jsp
- /apps/my-stuff/components/list-page/json.jsp
但是 Apache Sling DefaultServlet 似乎对 json.jsp 脚本一无所知。
作为第二次尝试,我在/apps/foundation/components/primary/cq/Page/json.jsp 中创建了另一个脚本,它将被实际调用,并按照我的预期呈现页面。但是,对此有一些担忧/问题:
- 首先,为什么系统会尊重这一点,而不是更具体的地方?
- 文档指出,要找到合适的渲染器,首先检查
sling:resourceType,然后检查sling:resourceSuperType,然后,仅作为后备检查jcr:PrimaryType。但是我认为这是相当的:jcr:PrimaryType,然后是DefaultServlet,然后是所有其他东西。 - 但最令人担忧的是,我不得不承认,这是相当通用的,所以它会破坏与
jcr:PrmaryType = Page的所有网络,因此可能会产生一些副作用。
一个解决方案可能是创建一个新类型:ListPage extends Page;然后在/apps/foundation... 中为它创建一个渲染器。但是我有这种不好的感觉,这可能会带来其他问题。
所以我的问题有两个:这样做的正确方法是什么,和/或我在 URL -> 脚本 解析在 AEM/Sling 中的工作方式中缺少什么。 (因为似乎和here和here描述的有点不同。)
(显然我正在尝试为其他页面保留默认 JSON 渲染器,因为页面中的其他内容可能需要它。我什至不确定,更改这一页不会破坏此特定页面的 UI ...)
【问题讨论】: