Page property in servlet | Community
Skip to main content
Level 6
Dec 31, 2021 7:00 AM UTC
Solved

Page property in servlet

I have a servlet which provides JSON for the page. I wanted to get page properties in my code in that servlet. But every time I add page manager or current page to my servlet, the JSON stops loading. And there's no error.

I have the page path. But adapting it to a page is causing issue.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
DEBAL_DAS
DEBAL_DASAccepted solution
New Participant
Jan 2, 2022 6:07 PM UTC

You can refer below code , I am accessing servlet via resourceType-

 


package com.aem.demo.core.servlets;

import java.io.IOException;
import java.util.Objects;

import javax.servlet.Servlet;

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.resource.ValueMap;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.day.cq.wcm.api.Page;

@8220494(service = Servlet.class, property = { "sling.servlet.resourceTypes=" + "demo/components/page",
"sling.servlet.methods=" + HttpConstants.METHOD_GET })
public class ReadPageInformationServlet extends SlingAllMethodsServlet {

private final Logger logger = LoggerFactory.getLogger(ReadPageInformationServlet.class);

/**
*
*/
private static final long serialVersionUID = 1L;

protected void doGet(SlingHttpServletRequest slingHttpServletRequest,
SlingHttpServletResponse slingHttpServletResponse) {

String requestURI = slingHttpServletRequest.getRequestURI();

String currentpagePath = requestURI.substring(0, requestURI.lastIndexOf("/"));

ResourceResolver resourceResolver = slingHttpServletRequest.getResourceResolver();

Resource resource = resourceResolver.getResource(currentpagePath);
if (Objects.nonNull(resource) && resource.isResourceType("cq:Page")) {

Page page = resource.adaptTo(Page.class);
ValueMap pageproperties = page.getProperties();
try {
slingHttpServletResponse.getWriter().println(pageproperties);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

}

6 replies

DEBAL_DAS
DEBAL_DASAccepted solution
New Participant
Jan 2, 2022 6:07 PM UTC

You can refer below code , I am accessing servlet via resourceType-

 


package com.aem.demo.core.servlets;

import java.io.IOException;
import java.util.Objects;

import javax.servlet.Servlet;

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.resource.ValueMap;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.day.cq.wcm.api.Page;

@8220494(service = Servlet.class, property = { "sling.servlet.resourceTypes=" + "demo/components/page",
"sling.servlet.methods=" + HttpConstants.METHOD_GET })
public class ReadPageInformationServlet extends SlingAllMethodsServlet {

private final Logger logger = LoggerFactory.getLogger(ReadPageInformationServlet.class);

/**
*
*/
private static final long serialVersionUID = 1L;

protected void doGet(SlingHttpServletRequest slingHttpServletRequest,
SlingHttpServletResponse slingHttpServletResponse) {

String requestURI = slingHttpServletRequest.getRequestURI();

String currentpagePath = requestURI.substring(0, requestURI.lastIndexOf("/"));

ResourceResolver resourceResolver = slingHttpServletRequest.getResourceResolver();

Resource resource = resourceResolver.getResource(currentpagePath);
if (Objects.nonNull(resource) && resource.isResourceType("cq:Page")) {

Page page = resource.adaptTo(Page.class);
ValueMap pageproperties = page.getProperties();
try {
slingHttpServletResponse.getWriter().println(pageproperties);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

}

Translate
Level 3
May 23, 2023 4:15 AM UTC

Hi,

I tried that code and somehow it returns me null resource and I am not able to get page properties.

I tried with static page path but it doesn't work.

Any help on this would be appreciated.

 

Thanks

Translate
Level 3
May 23, 2023 4:17 AM UTC

I forgot to mention that I am accessing servlet via path.

 

Does that make any difference?

Translate
lukasz-m
New Participant
Dec 31, 2021 8:51 AM UTC

Hi @shaheena_sheikh, I am not sure how you are trying to retrieve page properties, however you can try below code. It assumes that resource resolver from request will have read permissions to the page which page properties you would like to get.

 

ResourceResolver resourceResolver = request.getResourceResolver(); PageManager pageManager = resourceResolver.adaptTo(PageManager.class); Page page = pageManager.getPage(pagePath); ValueMap pageProperties = page.getProperties();

 

Translate
Level 3
Dec 31, 2021 7:22 AM UTC

Hi ,

 

 

Read the value in servlet by passing the current page pat in ajax-data.

 

where you consume the servlet - data - URI = ${currentPage.path @2941342= ""}.

 

Read the URI value in servlet - request.getParameter("URI");

 

Thanks,

Nani

Translate