如果我定义一个 Sling Servlet 如下:
@SlingServlet(
label="TestResourceTypeServlet",
name = "com.company.project.servlets.TestResourceType",
extensions = {"bob"},
resourceTypes= {"cq:Page"},
methods= {"GET"},
metatype=true)
@Properties({
@Property(name = "service.description", value = "A test servlet"),
@Property(name = "service.vendor", value = "Company")
})
servlet 会拾取对每个扩展名为“.bob”的页面的任何 get 请求,这很好,但我真正想要的是处理对特定页面类型的请求,
所以
我修改resourceTypes为read
resourceTypes= {"site-administration/components/page/page-distribution"},
提供的值是我尝试使用 .bob 扩展名访问的页面的特定 sling:resourceType(从 CRXDE Lite 复制并粘贴),但我得到 404!!!
我读过的所有文档都说上述内容应该有效,但事实并非如此。
出于绝望,我什至尝试了
"site-administration/components/page"
,这是我想要的页面的超级类型。
我正在运行一个干净的 5.6.1 实例,该 servlet 作为 OSGi 捆绑包的一部分。
我是否在这里遗漏了一些明显的东西,或者如果没有,是否有人知道可以解决此问题的任何修补程序?
任何帮助将不胜感激,因为我的头脑开始有点疯狂。
编辑
好吧,我已经更进一步了:如果我通过以下方式访问该页面:
[path-to-page]/page.bob.html
Servlet 启动。但是这个 URL 中的
bob
不是选择器?如果是这样,为什么当资源类型为 cq:Page
时,配置是否可以使用 bob 作为扩展?
非常困惑:-S
我显然在这里遗漏了一些非常简单的东西。
pages 的问题在于,resourceType 存储在 cq:Page 节点下方的 jcr:content 节点上。如果您拨打
[path-to-page]/_jcr_content.bob
,它应该可以工作。注意:_jcr_content
是 jcr:content
的 url 安全版本。
为什么你的最后一个例子实际上有效,我不知道。