Is there a way to include nested multifield using sling mapper in a single file?
@Inject
protected Resource resource;
List<Map<String, String>> marketData = new ArrayList<>();
List<Map<String, String>> marketContactData = new ArrayList<>();
@ChildResource(name="listItems", injectionStrategy = InjectionStrategy.OPTIONAL)
Resource listItemsResource;
@PostConstruct
protected void init() {
if(listItemsResource.hasChildren()){
Iterable<Resource> listMarket = listItemsResource.getChildren();
Iterator<Resource> listItemsIterator = listMarket.iterator();
while(listItemsIterator.hasNext()){
Resource listItemResource = listItemsIterator.next();
ValueMap listItemResourceValueMap = listItemResource.adaptTo(ValueMap.class);
Map<String, String> marketItem = new HashMap<>();
marketItem.put("marketName", listItemResource.getValueMap().get("marketName", String.class));
marketItem.put("countryFlag", listItemResource.getValueMap().get("countryFlag", String.class));
Resource childItemsResource = listItemResource.getChild("listContacts");
if(null != childItemsResource){
Iterable<Resource> iterable = childItemsResource.getChildren();
Iterator<Resource> iterator = iterable.iterator();
while(iterator.hasNext()){
Resource res = iterator.next();
Map<String, String> marketContact = new HashMap<>();
ValueMap childResourceValueMap = res.adaptTo(ValueMap.class);
marketContact.put("name", res.getValueMap().get("name", String.class));
marketContact.put("email", res.getValueMap().get("email", String.class));
marketContactData.add(marketContact);
}
}
marketData.add(marketItem);
}
}
}
public List<Map<String, String>> getMarketData() {
return marketData;
}
public void setMarketData(List<Map<String, String>> marketData) {
this.marketData = marketData;
}
public List<Map<String, String>> getMarketContactData() {
return marketContactData;
}
public void setMarketContactData(List<Map<String, String>> marketContactData) {
this.marketContactData = marketContactData;
}
}
and here's the sightly
<sly data-sly-use.model="com.......models.Model">
<p>Contacts</p>
<!--/* Iterate over contacts */-->
<ul data-sly-list.market="${model.marketData}">
<li>Market Name: ${market.marketName}</li>
<li>MarketFlag: ${market.countryFlag}</li>
<ul data-sly-list.contact="${market.marketContactData}">
<li>Contact Name: ${contact.name}</li>
<li>Email: ${contact.email}</li>
</ul>
It doesn't print the child nodes
Solved! Go to Solution.
Views
Replies
Total Likes
You can try below in nested way.
https://github.com/arunpatidar02/aem63app-repo/blob/master/demo/test.txt
Create model class for Parent, Child and GrandChild and adapt to this models and create a list(child) of lists(grand children).
Thank you for the reply
Thank you for the reply.
Views
Likes
Replies
Views
Like
Replies
Views
Likes
Replies