Is there any way to access page properties if only page path is given? | Adobe Higher Education
Skip to main content
Level 4
September 6, 2022
해결됨

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

  • September 6, 2022
  • 3 답변들
  • 898 조회

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

이 주제는 답변이 닫혔습니다.
최고의 답변: 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 답변

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
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");
rahul234dabas작성자
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