Expand my Community achievements bar.

Enhance your AEM Assets & Boost Your Development: [AEM Gems | June 19, 2024] Improving the Developer Experience with New APIs and Events
SOLVED

Page properties in sling model

Avatar

Level 6

Hi Team,

 

I Need to get page properties in the sling model if page property is null or empty then we need to get from its parent if that also null or empty then we need to get from its parent the like inherited page properties.

if any one did like these please share sling model login so that it will be usefull 

 

Thanks and Regards

Manikantha R

1 Accepted Solution

Avatar

Correct answer by
Level 4

 

HI @manikanthar1295  if you want to read page properties you have to inject the page, with that you can able to read page properties. And if you want to read inherited properties you have to use HierarchyNodeInheritanceValueMap.

 

 

Here is the piece of code.

 

@Model(adaptables = {SlingHttpServletRequest.class,
Resource. class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class TitleModel {


private String showDynamicMediaImage;

@Inject
private Page currentPage;

@PostConstruct
public void init() {
final HierarchyNodeInheritanceValueMap inheritanceMap = new HierarchyNodeInheritanceValueMap(currentPage.getContentResource());
showDynamicMediaImage = Objects.nonNull(currentPage.getProperties().get("showDynamicMediaImage", String.class))
? inheritanceMap.getInherited("showDynamicMediaImage", String.class)
: FALSE;
}
 
}

 

 

View solution in original post

5 Replies

Avatar

Correct answer by
Level 4

 

HI @manikanthar1295  if you want to read page properties you have to inject the page, with that you can able to read page properties. And if you want to read inherited properties you have to use HierarchyNodeInheritanceValueMap.

 

 

Here is the piece of code.

 

@Model(adaptables = {SlingHttpServletRequest.class,
Resource. class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class TitleModel {


private String showDynamicMediaImage;

@Inject
private Page currentPage;

@PostConstruct
public void init() {
final HierarchyNodeInheritanceValueMap inheritanceMap = new HierarchyNodeInheritanceValueMap(currentPage.getContentResource());
showDynamicMediaImage = Objects.nonNull(currentPage.getProperties().get("showDynamicMediaImage", String.class))
? inheritanceMap.getInherited("showDynamicMediaImage", String.class)
: FALSE;
}
 
}

 

 

Avatar

Community Advisor

If you already have acs-commons installed, you can use @HierarchicalPageProperty Sling Models Injector. 

@HierarchicalPageProperty("cq:designPath")
private String designPath;

https://adobe-consulting-services.github.io/acs-aem-commons/features/sling-model-injectors/hierarchi...  

Avatar

Administrator

@manikanthar1295 Did you find the suggestions from users helpful? Please let us know if more information is required. Otherwise, please mark the answer as correct for posterity. If you have found out solution yourself, please share it with the community.



Kautuk Sahni

Avatar

Level 1

here is my context.xml

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:granite="http://www.adobe.com/jcr/granite/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
    jcr:primaryType="nt:unstructured"
    jcr:title="Page"
    sling:resourceType="cq/gui/components/authoring/dialog"
    extraClientlibs="[cq.common.wcm,core.wcm.components.page.v3.editor,cq.wcm.msm.properties,granite.contexthub.configuration,cq.siteadmin.admin.properties,core.wcm.components.image.v3.editor]"
    helpPath="https://www.adobe.com/go/aem_cmp_page_v3"
    mode="edit"
    trackingFeature="core-components:page:v3">
    <content
        granite:class="cq-dialog-content-page"
        jcr:primaryType="nt:unstructured"
        sling:resourceType="granite/ui/components/coral/foundation/container">
        <items jcr:primaryType="nt:unstructured">
            <tabs
                granite:class="cq-siteadmin-admin-properties-tabs"
                jcr:primaryType="nt:unstructured"
                sling:resourceType="granite/ui/components/coral/foundation/tabs"
                size="L">
                <items jcr:primaryType="nt:unstructured">
                    <newtab
                            cq:showOnCreate="{Boolean}true"
                            jcr:primaryType="nt:unstructured"
                            jcr:title="New Tab"
                            sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns">
                        <items jcr:primaryType="nt:unstructured">
                            <column
                                    jcr:primaryType="nt:unstructured"
                                    sling:resourceType="granite/ui/components/coral/foundation/container">
                                <items jcr:primaryType="nt:unstructured">
                                    <section
                                            jcr:primaryType="nt:unstructured"
                                            jcr:title="New Custom tab"
                                            sling:resourceType="granite/ui/components/coral/foundation/form/fieldset">
                                        <items jcr:primaryType="nt:unstructured">
                                            <textfield
                                                    jcr:primaryType="nt:unstructured"
                                                    sling:resourceType="granite/ui/components/coral/foundation/form/textfield"
                                                    name="./testfield"/>
                                        </items>
                                    </section>
                                </items>
                            </column>
                        </items>
                    </newtab>
                </items>
            </tabs>
        </items>
    </content>
</jcr:root>

 

here is my custom properties 

Screenshot from 2024-03-25 23-56-01.png

 

how to get this page properties

Avatar

Community Advisor

You can retrieve page properties values in HTL using the following syntax.

${pageProperties.testfield}