2016-06-02 13 views
1

Ich versuche, eine Instanz von WCMUsePojo in einem Servlet zu erstellen. Die implementierende Klasse wird bereits in anschaulichen Vorlagen verwendet. Ich habe den Code unten ausprobiert und konnte ihn nicht zum Laufen bringen. Irgendwelche Ideen? Vielen Dank.Wie kann ich eine Instanz von WCMUsePojo in einem Servlet für eine bestimmte Seite erstellen?

@Override 
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException { 

    try { 
     Resource  resource = request.getResource().getResourceResolver().getResource 
       ("/content/mynewsite/homepage"); 
     WCMUsePojo template = resource.adaptTo(BaseTemplate.class); 
     template.getPageManager(); // Does not work 
    } finally { 
     log.error("Error processing servlet"); 
    } 
} 
+0

Wenn Sie nur 'PageManager' brauchen, können Sie' request.getResourceResolver() verwenden. AdapTo (PageManager.class); ' – rakhi4110

Antwort

0

Hm, ich bin mir nicht ganz sicher, ob ich dein Problem richtig verstanden habe, aber ich hoffe das hilft. Sling-Modelle können hier der falsche Ansatz sein, da einige Injektoren die Scripting-Engine zur Bereitstellung der Bindungen und Sling-Modelle normalerweise zur Bereitstellung eines Komponentenmodells oder zum Dekorieren/Umhüllen von OSGi-Services benötigen. Wenn Sie eine anspruchsvollere Lösung benötigen, müssen Sie möglicherweise Ihren eigenen Sling-Adapter schreiben.

package io.servlets; 

import com.day.cq.wcm.api.NameConstants; 
import com.day.cq.wcm.api.Page; 
import com.day.cq.wcm.api.PageManager; 
import com.day.cq.wcm.api.Template; 
import org.apache.commons.lang.StringUtils; 
import org.apache.sling.api.SlingHttpServletRequest; 
import org.apache.sling.api.SlingHttpServletResponse; 
import org.apache.sling.api.resource.Resource; 
import org.apache.sling.api.resource.ResourceResolver; 
import org.apache.sling.api.servlets.SlingSafeMethodsServlet; 

import javax.annotation.Nonnull; 
import javax.servlet.ServletException; 
import java.io.IOException; 

public class ContentServlet extends SlingSafeMethodsServlet { 

    @Override protected void doGet(@Nonnull SlingHttpServletRequest request, @Nonnull SlingHttpServletResponse response) 
      throws ServletException, IOException { 
     final Resource resource = request.getResource(); 
     final ResourceResolver resolver = resource.getResourceResolver(); 
     final PageManager pageManager = resolver.adaptTo(PageManager.class); 
     final Resource contentResource = resolver.getResource("/content/mynewsite/homepage"); 
     if (null != pageManager && null != contentResource) { 
      final Page page = pageManager.getContainingPage(contentResource); 
      // process the content here 
      // 
      // not available on publish 
      // final Template template = page.getTemplate(); 
      // 
      // use 
      final String templatePath = page.getProperties().get(NameConstants.NN_TEMPLATE, String.class); 
      if (StringUtils.isEmpty(templatePath)) { 
       // handle unexpected empty template path 
      } else { 
       final Template template = getTemplate(resolver, templatePath); 
       // check for null - it is troublesome ... I know 
      } 
     } 
    } 

    private Template getTemplate(final ResourceResolver resolver, final String templatePath) { 
     final Resource templateResource = resolver.getResource(templatePath); 
     if (null == templateResource) { 
      // handle unexpected missing template 
      return null; 
     } else { 
      final Template template = templateResource.adaptTo(Template.class); 
      if (null == template) { 
       // handle broken adapter 
       return null; 
      } else { 
       return template; 
      } 
     } 
    } 
} 
0

Ich habe eine ähnliche problem. In meinen Tests fand ich, dass das folgende Muster WCMUsePojo-Klassen instanziiert. Ich weiß nicht, welche Bindungen in deinem Fall benötigt werden.