AEM Global Objects for Backend and Front-end Sightly (HTL) Development

While working on an AEM project, we can speed up the process of development by utilizing the global objects offered by AEM Framework.

AEM Backend, an example of using global objects

  • The global objects are accessible by OSGI’s dependency injection annotation; @inject.
  • GET, SET, and other methods can be invoked by the POJO class.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import com.day.cq.wcm.api.Page;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Model;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.logging.Logger;

@Model(adaptables = {SlingHttpServletRequest.class, Resource.class},
        resourceType = ExampleComponent.RESOURCE_TYPE)
public class ExampleComponent {

    static final String RESOURCE_TYPE = "sourcedc/components/structure/examplecomponent";

    @Inject
    Logger log;

    @Inject
    SlingHttpServletResponse response;

    @Inject
    SlingHttpServletRequest request;

    @Inject
    Page currentPage;

    @Inject
    Resource resource;

    @PostConstruct
    private void init() {
        String componentsProp = resource.getValueMap().get("subtitleText", String.class);
        String currentPagePath = currentPage.getPath();
        String userID = request.getParameter("userid");
        String localeCountry = response.getLocale().getCountry();

        // setting json response
        response.setContentType("application/json");
        String contentType = response.getContentType();
        log.info("Example component initiated.");
    }

}

AEM Front-End, example of using the global objects, stored in reserved variables:

  • The global objects are accessible by using unique variables (defined below).
  • Only GET methods can be invoked by Sightly/HTL.
  • While previewing the java documentation, only the get methods can be used. While using the global object, exclude the “get” prefix.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Current Page Path : ${currentPage.path} <!-- javadocs : getPath(); -->

Current Page Name : ${currentPage.name} <!-- javadocs : getName(); -->

response country : ${response.locale.country} <!-- javadocs : getLocale().getCountry(); -->

response type : ${response.contentType} <!-- javadocs : geetContentType(); -->

component's property subTitleText : ${properties.subTitleText}

<!-- loop through all children page's of current page -->
<div data-sly-list="">
     <p>${child.name}</p>
</div>

// this article does not cover the usage of the Sightly(HTL) syntax. For a quick reference, check out this document:
https://github.com/adobe/htl-spec/blob/master/SPECIFICATION.md

Mapping of Sightly/HTL Variables and AEM Backend Objects:

Sightly/HTL Variables
AEM Backend Objects
Documentation
component
com.day.cq.wcm.api.components.Component
componentContext
com.day.cq.wcm.api.components.ComponentContext
currentDesign
com.day.cq.wcm.api.designer.Design
currentNode
javax.jcr.Node
currentPage
com.day.cq.wcm.api.Page
currentSession
javax.servlet.http.HttpSession
currentStyle
com.day.cq.wcm.api.designer.Style
designer
com.day.cq.wcm.api.designer.Designer
editContext
com.day.cq.wcm.api.components.EditContext
log
org.slf4j.Logger
out
java.io.PrintWriter
pageManager
com.day.cq.wcm.api.PageManager
reader
java.io.BufferedReader
request
org.apache.sling.api.SlingHttpServletRequest
resolver
org.apache.sling.api.resource.ResourceResolver
resource
org.apache.sling.api.resource.Resource
resourceDesign
com.day.cq.wcm.api.designer.Design
resourcePage
com.day.cq.wcm.api.Page
response
org.apache.sling.api.SlingHttpServletResponse
sling
org.apache.sling.api.scripting.SlingScriptHelper
slyWcmHelper
com.adobe.cq.sightly.WCMScriptHelper
wcmmode
com.adobe.cq.sightly.SightlyWCMMode
xssAPI
com.adobe.granite.xss.XSSAPI
documentation
Got Questions?

If you have any comments or topics that you would like me to cover, please leave a comment below.

Certified AEM Developer who has been working on AEM software developer for the past 5 years.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top