Aem 如何在servlet中为特定页面创建WCMUsePojo实例?

Aem 如何在servlet中为特定页面创建WCMUsePojo实例?,aem,sling,Aem,Sling,我正在尝试在servlet中创建WCMUsePojo的实例。实现类已经在sightly模板中使用。我尝试了下面的代码,但无法使其工作。有什么想法吗?谢谢 @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException { try { Resource resource = reques

我正在尝试在servlet中创建WCMUsePojo的实例。实现类已经在sightly模板中使用。我尝试了下面的代码,但无法使其工作。有什么想法吗?谢谢

    @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");
    }
}

嗯,我不太确定我是否正确理解了你们的问题,但我希望这能有所帮助。在这里,吊索模型可能是错误的方法,因为一些注入器需要脚本引擎来提供绑定,吊索模型通常用于提供组件模型或装饰/包装OSGi服务。如果您需要更复杂的解决方案,您可能必须编写自己的Sling适配器

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;
            }
        }
    }
}

嗯,我不太确定我是否正确理解了你们的问题,但我希望这能有所帮助。在这里,吊索模型可能是错误的方法,因为一些注入器需要脚本引擎来提供绑定,吊索模型通常用于提供组件模型或装饰/包装OSGi服务。如果您需要更复杂的解决方案,您可能必须编写自己的Sling适配器

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;
            }
        }
    }
}
我有一个类似的问题。在我的测试中,我发现下面的模式似乎实例化了WCMUsePojo类。我不知道你的案子需要什么绑定

BaseTemplate template = new BaseTemplate();
SimpleBindings bindings = new SimpleBindings();
bindings.put("resource", resource);
template.init(bindings);
我有一个类似的问题。在我的测试中,我发现下面的模式似乎实例化了WCMUsePojo类。我不知道你的案子需要什么绑定

BaseTemplate template = new BaseTemplate();
SimpleBindings bindings = new SimpleBindings();
bindings.put("resource", resource);
template.init(bindings);

如果您只需要
PageManager
,我想您可以使用
request.getResourceResolver().adapTo(PageManager.class)
如果您只需要
PageManager
,我想您可以使用
request.getresourcesolver().adapTo(PageManager.class)