Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn More

View all

Sign in to view all badges

How to read page content(only text) using Sling

Avatar

Avatar
Ignite 1
Level 1
sathishreddy
Level 1

Likes

0 likes

Total Posts

10 posts

Correct Reply

0 solutions
Top badges earned
Ignite 1
View profile

Avatar
Ignite 1
Level 1
sathishreddy
Level 1

Likes

0 likes

Total Posts

10 posts

Correct Reply

0 solutions
Top badges earned
Ignite 1
View profile
sathishreddy
Level 1

07-01-2020

Hi,

 

I have a requirement to read page content(text only) and club entire content as String.  I am able to read using JCR api below is the code snippet. Mostly we created content using Text component and title component so that's why I used those components only in search query.

 

public String getPageContent(SlingHttpServletRequest request) {
ResourceResolver resourceResolver = null;
Session session;
String stringJsonContent = null;
try {
resourceResolver = request.getResourceResolver();
if (resourceResolver != null && resourceResolver.isLive()) {
session = resourceResolver.adaptTo(Session.class);
Map<String, String> map = new HashMap<String, String>();
map.put("path",
"/content/mypage/jcr:content");
map.put("group.p.or", "true");
map.put("group.1_property", "sling:resourceType");
map.put("group.1_property.value", "mycomponents/components/content/text");
map.put("group.2_property", "sling:resourceType");
map.put("group.2_property.value", "mycomponents/components/content/title");
map.put("p.limit", "-1");
builder = resourceResolver.adaptTo(QueryBuilder.class);
// INvoke the Search query
Query query = builder.createQuery(PredicateGroup.create(map), session);
SearchResult sr = query.getResult();
String contentText = "";
// write out to the AEM Log file
LOGGER.info("Search Results: " + sr.getTotalMatches());
for (Hit hit : sr.getHits()) {
Resource textResource = hit.getResource();
ValueMap textProperties = textResource.adaptTo(ValueMap.class);
if (StringUtils.isBlank(textProperties.get("text", String.class))) {
if(StringUtils.isNotBlank(textProperties.get("jcr:title", String.class)))
contentText += " " + removeHtml(textProperties.get("jcr:title", String.class));
} else {
if(StringUtils.isNotBlank(textProperties.get("text", String.class)))
contentText += " " + removeHtml(textProperties.get("text", String.class));
}
}
}
} catch (Exception e) {
LOGGER.error("Bodybuilder DynamicMenu Exception : " + e);
}
}

 

Above code is working as expected. But I want to know Is there any other way to achieve above scenario instead of mentioning component names. Can we achieve using sling api.

 

Thanks,

Sathish