CQ5 SlingServlet和resourceTypes不适用于特定资源路径

时间:2015-06-16 12:45:42

标签: servlets cq5 aem sling

如果我按如下方式定义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

我显然在这里遗漏了一些非常简单的东西。

1 个答案:

答案 0 :(得分:5)

页面的问题是resourceType存储在cq:Page节点下面的jcr:content节点上。如果你打电话给[path-to-page]/_jcr_content.bob它应该有效。注意:_jcr_contentjcr:content的网址保存版本。

为什么你的最后一个例子确实有效,我不知道。