我正在完成一项任务,该任务涉及创建一个servlet以在Adobe CQ 5.5中接收html请求。它需要拉出cq:defineObjects标记定义的一些对象。其中两个对象是resourceDesign和resourcePage。
我相信我也许可以使用以下代码从resourcePage检索resourceDesign:
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
...
@Override
protected void doGet(SlingHttpServletRequest slingRequest, SlingHttpServletResponse slingResponse) throws ServletException, IOException {
ResourceResolver resourceResolver = slingRequest.getResourceResolver();
...
Designer designer = resourceResolver.adaptTo(Designer.class);
Page resourcePage = ...
Design resourceDesign = designer.getDesign(resourcePage);
}
但是,我不太了解如何检索resourcePage,并且文档也没有清楚地知道它是什么或如何获得其价值。
任何见解将不胜感激。
谢谢,
汤玛士
最佳答案
resourcePage是指包含您的资源的页面,并且是com.day.cq.wcm.api.Page
的实例,resourceDesign是资源页面的设计对象。
可以使用PageManager的#getContainingPage()
获得resourcePage,如下所示。
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
...
@Override
protected void doGet(SlingHttpServletRequest slingRequest,
SlingHttpServletResponse slingResponse) throws ServletException, IOException {
ResourceResolver resourceResolver = slingRequest.getResourceResolver();
PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
Page resourcePage = pageManager.getContainingPage(slingRequest.getResource());
Designer designer = resourceResolver.adaptTo(Designer.class);
Design resourceDesign = designer.getDesign(resourcePage);
}
有关更多信息,请参考this doc。