April 26, 2020
Estimated Post Reading Time ~ 1 mins

Fetch Content Fragment using Sling Model

We have seen how to create a content fragment in the previous post.

Content Fragments can be rendered onto a page by below different ways:
  1. Using AEM core components
  2. Using Custom Sling Model
  3. Using Servlet to access Content Fragment.
Screenshot+2020-03-03+at+21.44.51

Let's see how to render Content Fragment using the sling Model.

Screenshot+2020-03-03+at+21.41.47

Create an AEM component "samplecontentfragment" which calls the sling model SampleContentFragment.java

samplecontentfragment.html
<p data-sly-test="${properties.text}">Text property: ${properties.text}</p>

Render Content Fragment using Sling Model 
Title: ${model.title}
Description: ${model.description}
Release Date: ${model.releaseDate}
</img>
</sly>

SampleContentFragment.java
package com.adobe.aemquickstart.core.models;

import java.util.Calendar;
import java.util.Optional;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.apache.commons.lang.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.Self;

import com.adobe.cq.dam.cfm.ContentElement;
import com.adobe.cq.dam.cfm.ContentFragment;
import com.adobe.cq.dam.cfm.FragmentData;
import com.adobe.cq.dam.cfm.FragmentTemplate;

@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class SampleContentFragment {
 public static final String MODEL_TITLE = "AEM Book";
 public static final String CF_PATH = "/content/dam/aemquickstart/content-fragments/aem-book";

 @Inject
 @Self
 private Resource resource;
 @Inject
 ResourceResolver resourceResolver;
 private Optional<ContentFragment> contentFragment;

 @PostConstruct
 public void init() {
  Resource fragmentResource = resourceResolver.getResource(CF_PATH);
  contentFragment = Optional.ofNullable(fragmentResource.adaptTo(ContentFragment.class));
 }

 public String getTitle() {
  return contentFragment.map(cf -> cf.getElement("title")).map(ContentElement::getContent)
    .orElse(StringUtils.EMPTY);
 }

 public String getDescription() {
  return contentFragment.map(cf -> cf.getElement("description")).map(ContentElement::getContent)
    .orElse(StringUtils.EMPTY);
 }

 public Calendar getReleaseDate() {
  return ((Calendar) contentFragment.map(cf -> cf.getElement("releaseDate")).map(ContentElement::getValue)
    .map(FragmentData::getValue).orElse(StringUtils.EMPTY));
 }

 public String getImage() {
  return contentFragment.map(cf -> cf.getElement("image")).map(ContentElement::getContent)
    .orElse(StringUtils.EMPTY);
 }
}

Add the new component on to the page and refresh the page.
Screenshot+2020-03-03+at+21.44.51
aem4beginner.blogspot


By aem4beginner

1 comment:

If you have any doubts or questions, please let us know.

Ad Blocker Detected :(

Please consider supporting us by disabling your ad blocker.

Please Disable your adblocker and Refresh the page to view the site content.