Leiste mit Community-Erfolgen erweitern.

The first preview of our new Community upgrade is live - check it out now.

Mark Solution

Diese Konversation wurde aufgrund von Inaktivität geschlossen. Bitte erstellen Sie einen neuen Post.

GELÖST

How do we write nested multifield using sling mapper?

Avatar

Level 4

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

1 Akzeptierte Lösung

Avatar

Korrekte Antwort von
Level 7
4 Antworten

Avatar

Community Advisor

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).

Arun Patidar

AEM LinksLinkedIn

Avatar

Level 4

Thank you for the reply

Avatar

Korrekte Antwort von
Level 7

Avatar

Level 4

Thank you for the reply.