我正在尝试在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");
}
}发布于 2016-06-05 05:23:58
嗯,我不太确定我是否正确理解了你的问题,但我希望这能有所帮助。Sling模型在这里可能是错误的方法,因为一些注入器需要脚本引擎来提供绑定,而Sling模型通常用于提供组件模型或装饰/包装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;
}
}
}
}发布于 2016-07-06 05:09:56
我有一个类似的problem。在我的测试中,我发现下面的模式似乎实例化了WCMUsePojo类。我不知道在你的案例中需要什么绑定。
BaseTemplate template = new BaseTemplate();
SimpleBindings bindings = new SimpleBindings();
bindings.put("resource", resource);
template.init(bindings);https://stackoverflow.com/questions/37582439
复制相似问题