Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Sling Models in AEM
(by Ankur Chauhan)
Agenda
Agenda
1. What are Sling Models?
Agenda
1. What are Sling Models?
2. Why Sling Models?
Agenda
1. What are Sling Models?
2. Why Sling Models?
3. How to use Sling Models in AEM?
Agenda
1. What are Sling Models?
2. Why Sling Models?
3. How to use Sling Models in AEM?
4. Sling Model Annotations with D...
Agenda
1. What are Sling Models?
2. Why Sling Models?
3. How to use Sling Models in AEM?
4. Sling Model Annotations with D...
“Sling models are pure Plain Old Java Objects (POJO), which
are automatically mapped from Sling objects, typically
resourc...
➢
These are "Pure" POJOs.
➢
Use standard annotations where possible.
➢
OOTB, support resource properties (via ValueMap), S...
Agenda
1. What are Sling Models?
2. Why Sling Models?
3. How to use Sling Models in AEM?
4. Sling Model annotations with D...
➢
Using Sling Models you can do more with less code
➢
You can reduce your coding efforts.
➢
Your code is more maintable us...
Agenda
1. What are Sling Models?
2. Why Sling Models?
3. How to use Sling Models in AEM?
4. Sling Model annotations with D...
Dependency Required
➢
If you are working with AEM6 then you have org.apache.sling.models.api package
already present in yo...
Dependency Required
➢
If you are working with AEM6 then you have org.apache.sling.models.api package
already present in yo...
Dependency Required
➢
If you are working with AEM6 then you have org.apache.sling.models.api package
already present in yo...
Dependency Required
➢
If you are working with AEM6 then you have org.apache.sling.models.api package
already present in yo...
Dependency Required
➢
It depends on your AEM version so best way is to find this dependency at your on AEM instance
for th...
Dependency Required
➢
It depends on your AEM version so best way is to find this dependency at your on AEM instance
for th...
➢
Now add this dependency to your project.
➢
Search for maven-scr-plugin in your parent pom.xml file.
➢
Update it with
<pl...
Agenda
1. What are Sling Models?
2. Why Sling Models?
3. How to use Sling Models in AEM?
4. Sling Model annotations with D...
Annotations
➢
@Model
➢
@Inject
➢
@Optional
➢
@Default
➢
@Named
➢
@PostConstruct
➢
@Via
➢
@Source
➢
@Required
➢
List<Resour...
Before starting with these annotations, Let's have a look on this line of code.
resource.adaptTo(ValueMap.class);
In this ...
Code Snippet Part - I
@Model(adaptables = Resource.class )
public class ResourceValues {
...
}
Code Snippet Part - I
@Model(adaptables = Resource.class )
public class ResourceValues {
@Inject // If defined then Resour...
Code Snippet Part - I
@Model(adaptables = Resource.class )
public class ResourceValues {
@Inject // If defined then Resour...
Code Snippet Part - I
@Model(adaptables = Resource.class )
public class ResourceValues {
@Inject // If defined then Resour...
Code Snippet Part - I
@Model(adaptables = Resource.class )
public class ResourceValues {
@Inject // If defined then Resour...
Question?
Is it required to add this @optional annotation at every field, if want to make is optional?
Answer ?
Yes, if you are using Sling API version before 1.0.2 and after this version you get another property
in @Model an...
Code Snippet Part - II
How to use Sling Models in AEM?
ResourceValues resourceValues = resource.adaptTo(ResourceValues.cla...
Code Snippet Part - II
How to use Sling Models in AEM?
ResourceValues resourceValues = resource.adaptTo(ResourceValues.cla...
Code Snippet Part - II
How to use Sling Models in AEM?
ResourceValues resourceValues = resource.adaptTo(ResourceValues.cla...
Code Snippet Part - III
@Model(adaptables = Resource.class)
public class ResourceValues {
/* Child List injection works af...
Code Snippet Part - III
@Model(adaptables = Resource.class)
public class ResourceValues {
/* Child List injection works af...
Code Snippet Part - IV
@Model(adaptables=SlingHttpServletRequest.class)
public interface RequestValues {
/* will return
re...
Code Snippet Part - V
@Model(adaptables=SlingHttpServletRequest.class)
public interface RequestValues {
/* Ensure that "re...
Questions??
References:
Sling Model Documentation
Upcoming SlideShare
Loading in …5
×

Understanding Sling Models in AEM

5,224 views

Published on

This presentation explains Sling Models in AEM.

Published in: Technology
  • Be the first to comment

Understanding Sling Models in AEM

  1. 1. Sling Models in AEM (by Ankur Chauhan)
  2. 2. Agenda
  3. 3. Agenda 1. What are Sling Models?
  4. 4. Agenda 1. What are Sling Models? 2. Why Sling Models?
  5. 5. Agenda 1. What are Sling Models? 2. Why Sling Models? 3. How to use Sling Models in AEM?
  6. 6. Agenda 1. What are Sling Models? 2. Why Sling Models? 3. How to use Sling Models in AEM? 4. Sling Model Annotations with Demo.
  7. 7. Agenda 1. What are Sling Models? 2. Why Sling Models? 3. How to use Sling Models in AEM? 4. Sling Model Annotations with Demo.
  8. 8. “Sling models are pure Plain Old Java Objects (POJO), which are automatically mapped from Sling objects, typically resource and request objects. We can also inject OSGi Services in these models as well.”
  9. 9. ➢ These are "Pure" POJOs. ➢ Use standard annotations where possible. ➢ OOTB, support resource properties (via ValueMap), SlingBindings, OSGi services, request attributes ➢ Adapt multiple objects - minimal required Resource and SlingHttpServletRequest ➢ Client doesn't know/care that these objects are different than any other adapter factory ➢ Support both classes and interfaces. ➢ Work with existing Sling infrastructure (i.e. not require changes to other bundles). Design Goals
  10. 10. Agenda 1. What are Sling Models? 2. Why Sling Models? 3. How to use Sling Models in AEM? 4. Sling Model annotations with Demo.
  11. 11. ➢ Using Sling Models you can do more with less code ➢ You can reduce your coding efforts. ➢ Your code is more maintable using Sling Modes. ➢ You don't have to write redundent code. It is more understandable using a live scenario. (Native Ecommerce API in AEM)
  12. 12. Agenda 1. What are Sling Models? 2. Why Sling Models? 3. How to use Sling Models in AEM? 4. Sling Model annotations with Demo
  13. 13. Dependency Required ➢ If you are working with AEM6 then you have org.apache.sling.models.api package already present in your AEM instance.
  14. 14. Dependency Required ➢ If you are working with AEM6 then you have org.apache.sling.models.api package already present in your AEM instance. ➢ If you are using earlier version of AEM then you have to download this package from Sling website and then install it at your AEM instance.
  15. 15. Dependency Required ➢ If you are working with AEM6 then you have org.apache.sling.models.api package already present in your AEM instance. ➢ If you are using earlier version of AEM then you have to download this package from Sling website and then install it at your AEM instance. ➢ You can find all the Sling Models Injectors at http://localhost:4502/system/console/status-slingmodels
  16. 16. Dependency Required ➢ If you are working with AEM6 then you have org.apache.sling.models.api package already present in your AEM instance. ➢ If you are using earlier version of AEM then you have to download this package from Sling website and then install it at your AEM instance. ➢ You can find all the Sling Models Injectors at http://localhost:4502/system/console/status-slingmodels ➢ Maven dependecy for your project can be found at-
  17. 17. Dependency Required ➢ It depends on your AEM version so best way is to find this dependency at your on AEM instance for that you can search for – org.apache.sling.models in felix console bundles tab. Or ➢ Go to Felix Console packages tab And search for org.apache.sling.models.annotations.Model it you will get the Maven dependency for your project.
  18. 18. Dependency Required ➢ It depends on your AEM version so best way is to find this dependency at your on AEM instance for that you can search for – org.apache.sling.models in felix console bundles tab. Or ➢ Go to Felix Console packages tab And search for org.apache.sling.models.annotations.Model it you will get the Maven dependency for your project. <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.models.api</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency>
  19. 19. ➢ Now add this dependency to your project. ➢ Search for maven-scr-plugin in your parent pom.xml file. ➢ Update it with <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Sling-Model-Packages> sling.models </Sling-Model-Packages> <Bundle-Category>sling-model-demo</Bundle-Category> </instructions> </configuration> </plugin> ➢ This plugin modification is mandatory so that this header must be added to the bundle's manifest file.
  20. 20. Agenda 1. What are Sling Models? 2. Why Sling Models? 3. How to use Sling Models in AEM? 4. Sling Model annotations with Demo
  21. 21. Annotations ➢ @Model ➢ @Inject ➢ @Optional ➢ @Default ➢ @Named ➢ @PostConstruct ➢ @Via ➢ @Source ➢ @Required ➢ List<Resource> list.
  22. 22. Before starting with these annotations, Let's have a look on this line of code. resource.adaptTo(ValueMap.class); In this code snippet - ➢ resource will behaves as an adaptable ➢ ValueMap behaves as an adapter
  23. 23. Code Snippet Part - I @Model(adaptables = Resource.class ) public class ResourceValues { ... }
  24. 24. Code Snippet Part - I @Model(adaptables = Resource.class ) public class ResourceValues { @Inject // If defined then Resource must have this property else it will return null. private String firstName; }
  25. 25. Code Snippet Part - I @Model(adaptables = Resource.class ) public class ResourceValues { @Inject // If defined then Resource must have this property else it will return null. private String firstName; /* To provide default value to this string for Strings & primitives, Default only works with @Inject annotation not with @Optional annotation. */ @Inject @Default(values="defaultValue") private String lastName; }
  26. 26. Code Snippet Part - I @Model(adaptables = Resource.class ) public class ResourceValues { @Inject // If defined then Resource must have this property else it will return null. private String firstName; /* To provide default value to this string for Strings & primitives, Default only works with @Inject annotation not with @Optional annotation. */ @Inject @Default(values="defaultValue") private String lastName; /* If the field or method name doesn't exactly match the property name */ @Inject @Named("secondPropertyName") private String otherName; }
  27. 27. Code Snippet Part - I @Model(adaptables = Resource.class ) public class ResourceValues { @Inject // If defined then Resource must have this property else it will return null. private String firstName; /* To provide default value to this string for Strings & primitives, Default only works with @Inject annotation not with @Optional annotation. */ @Inject @Default(values="defaultValue") private String lastName; /* If the field or method name doesn't exactly match the property name */ @Inject @Named("secondPropertyName") private String otherName; @Optional // If defined then Resource may or may not have property. private String fullName; }
  28. 28. Question? Is it required to add this @optional annotation at every field, if want to make is optional?
  29. 29. Answer ? Yes, if you are using Sling API version before 1.0.2 and after this version you get another property in @Model annotation named as defaultInjectionStrategy. After adding this property all the fields are by default @optional. But if you wnat some field as required then you have to add @required annotation on that field. This property is defined in @Model annotation and it's syntex is- @Model(adaptables=Resource.class,defaultInjectionStrategy=DefaultInjectionStrategy.OPTIONAL)
  30. 30. Code Snippet Part - II How to use Sling Models in AEM? ResourceValues resourceValues = resource.adaptTo(ResourceValues.class)
  31. 31. Code Snippet Part - II How to use Sling Models in AEM? ResourceValues resourceValues = resource.adaptTo(ResourceValues.class) How to use in JSP? <sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.models.it.models.MyModel" var="model"/>
  32. 32. Code Snippet Part - II How to use Sling Models in AEM? ResourceValues resourceValues = resource.adaptTo(ResourceValues.class) How to use in JSP? <sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.models.it.models.MyModel" var="model"/> How to use in Sightly? ${sling:adaptTo(resource, 'org.apache.sling.models.it.models.MyModel')}
  33. 33. Code Snippet Part - III @Model(adaptables = Resource.class) public class ResourceValues { /* Child List injection works after Sling version 1.0.6. This List injection will hold list of all the child nodes present under childs node under current resource. */ @Inject private List<Resource> childs; }
  34. 34. Code Snippet Part - III @Model(adaptables = Resource.class) public class ResourceValues { /* Child List injection works after Sling version 1.0.6. This List injection will hold list of all the child nodes present under childs node under current resource. */ @Inject private List<Resource> childs; /* The @PostConstruct annotation can be used to add methods which are invoked upon completion of all injections */ @PostConstruct protected void sayHello() { System.out.println("post construct is working"); } }
  35. 35. Code Snippet Part - IV @Model(adaptables=SlingHttpServletRequest.class) public interface RequestValues { /* will return request.getResource().adaptTo(ValueMap.class).get("propertyName", String.class) */ @Inject @Via("resource") String getPropertyName(); } Means:- “If the injection should be based on a JavaBean property of the adaptable, you can indicate this using the @Via annotation”
  36. 36. Code Snippet Part - V @Model(adaptables=SlingHttpServletRequest.class) public interface RequestValues { /* Ensure that "resource" is retrived from the bindings, not a request attribute */ @Inject @Source("script-bindings") Resource getResource(); }
  37. 37. Questions??
  38. 38. References: Sling Model Documentation

×