如果我按如下方式定义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”的每个页面,这很好,但我真正想要的是处理对特定页面类型的请求,
SO
我修改resourceTypes以读取
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
我显然在这里遗漏了一些非常简单的东西。
答案 0 :(得分:5)
页面的问题是resourceType存储在cq:Page节点下面的jcr:content节点上。如果你打电话给[path-to-page]/_jcr_content.bob
它应该有效。注意:_jcr_content
是jcr:content
的网址保存版本。
为什么你的最后一个例子确实有效,我不知道。