Is there any way to access page properties if only page path is given? | Community
Skip to main content
Level 4
September 6, 2022
Solved

Is there any way to access page properties if only page path is given?

  • September 6, 2022
  • 3 replies
  • 898 views

I want to access the properties of specific page but I only have its path with me in the sling model.

how can I access the page properties if only the path is given?

 

I have tried using : 

 

@ScriptVariable
private ResourceResolver resourceResolver;
Page rootPage = resourceResolver.getResource(PAGE_PATH).adaptTo(Page.class);

 but I am getting a null pointer exception in this.

Please help me find out how to do it.

 

Thank you

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by HeenaMadan

Follow below lines of code In sling init method

@Model(adaptables = {
        Resource.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL, resourceType = "")
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)
public class YourModel{
@SlingObject
    ResourceResolver resourceResolver;
init(){
Resource resource = resourceResolver.getResource("path");
 PageManager pageManager =  resource.getResourceResolver().adaptTo(PageManager.class);
Page containingPage = pageManager.getContainingPage(resource);
if(Objects.nonNull(containingPage){
 ValueMap pageProperties = containingPage.getProperties();
}
}
}

OR

 PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
Page page = pageManager.getPage(currentPage.getPath());// for current page
Page page = pageManager.getPage("provided path");

3 replies

Adobe Employee
September 6, 2022

It should be straight forward:

 

@Model(adaptable=Resource.class)

public class TestClass {

 

@1961677

Resource resource;

 

@PostConstruct

public void init() {

  PageManager pm = resource.getResourceResolver().adaptTo(PageManager.class);

  Page containingPage = pm.getContainingPage (resource);

  ValueMap pageProperties = containingPage.getProperties();

 

}

 

 

}

Chandra_Hire
Level 4
September 6, 2022

Hi @rahul234dabas ,
If resource is null, alternatively you can use

 

PageManager pageManager = resourceResolver.adaptTo(PageManager.class);

Page currentPage = pageManager.getPage("/content/page/en/"); 

 

HeenaMadan
Community Advisor and Adobe Champion
HeenaMadanCommunity Advisor and Adobe ChampionAccepted solution
Community Advisor and Adobe Champion
September 6, 2022

Follow below lines of code In sling init method

@Model(adaptables = {
        Resource.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL, resourceType = "")
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)
public class YourModel{
@SlingObject
    ResourceResolver resourceResolver;
init(){
Resource resource = resourceResolver.getResource("path");
 PageManager pageManager =  resource.getResourceResolver().adaptTo(PageManager.class);
Page containingPage = pageManager.getContainingPage(resource);
if(Objects.nonNull(containingPage){
 ValueMap pageProperties = containingPage.getProperties();
}
}
}

OR

 PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
Page page = pageManager.getPage(currentPage.getPath());// for current page
Page page = pageManager.getPage("provided path");
Level 4
September 7, 2022

by changing the annotation from @ScriptVariable to @SlingObject it worked ,

Thank you

May I know what's the difference between two annotations in layman's language?

 

Thank you