我正在完成一项任务,该任务涉及创建一个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

10-01 12:32