Nested Multifield- Inner multifield data is not populating | Community
Skip to main content
New Participant
January 27, 2023
Solved

Nested Multifield- Inner multifield data is not populating

  • January 27, 2023
  • 4 replies
  • 1582 views

I am trying to create a nested multifield but the inner multifield data is not populating.

Attatching my sling model and sit-ly code.

Please help I am a fresher.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by DEBAL_DAS

Sharing .content.xml file associated with my sample nested multifield component -

<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:granite="http://www.adobe.com/jcr/granite/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" jcr:primaryType="nt:unstructured" jcr:title="Companies" sling:resourceType="cq/gui/components/authoring/dialog"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns"> <items jcr:primaryType="nt:unstructured"> <column jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <companies jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/multifield" composite="{Boolean}true" fieldDescription="Click 'Add Field' to add a new company."> <field jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container" name="./companies"> <items jcr:primaryType="nt:unstructured"> <name jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldLabel="Comp. Name" name="name"/> <departments jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/multifield" composite="{Boolean}true" fieldDescription="Click 'Add Field' to add a new department." fieldLabel="Departments"> <field jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container" name="./departments"> <items jcr:primaryType="nt:unstructured"> <image jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/pathfield" fieldLabel="Image" name="image" rootPath="/content/dam/we-retail/en/people"/> </items> </field> </departments> <activationDate granite:rel="schedule-move-datepicker" jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/datepicker" displayedFormat="&#x9;&#xa;YYYY-MM-DD HH:mm" displayTimezoneMessage="{Boolean}true" emptyText="Select Date &amp; Time" minDate="today" name="scheduleDate" type="date"/> </items> </field> </companies> </items> </column> </items> </content> </jcr:root>

Sling Model -

package com.aem.demo.core.models; import java.util.List; import javax.inject.Inject; import org.apache.sling.api.resource.Resource; import org.apache.sling.models.annotations.DefaultInjectionStrategy; import org.apache.sling.models.annotations.Model; @Model( adaptables = {Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public interface CompaniesModel { @Inject List<Company> getCompanies(); // the name `getCompanies` corresponds to the multifield name="./companies" /** * Company model * has a name and a list of departments */ @Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) interface Company { @586265 String getName(); @586265 List<Department> getDepartments(); // the name `getDepartments` corresponds to the multifield name="./departments" } /** * Department model * has a name and a manager */ @Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) interface Department { @586265 String getImage(); } }

 

Authoring entries -

Content displays on page -

Please review and hope these will help.

4 replies

DEBAL_DAS
DEBAL_DASAccepted solution
New Participant
January 29, 2023

Sharing .content.xml file associated with my sample nested multifield component -

<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:granite="http://www.adobe.com/jcr/granite/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" jcr:primaryType="nt:unstructured" jcr:title="Companies" sling:resourceType="cq/gui/components/authoring/dialog"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns"> <items jcr:primaryType="nt:unstructured"> <column jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <companies jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/multifield" composite="{Boolean}true" fieldDescription="Click 'Add Field' to add a new company."> <field jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container" name="./companies"> <items jcr:primaryType="nt:unstructured"> <name jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldLabel="Comp. Name" name="name"/> <departments jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/multifield" composite="{Boolean}true" fieldDescription="Click 'Add Field' to add a new department." fieldLabel="Departments"> <field jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container" name="./departments"> <items jcr:primaryType="nt:unstructured"> <image jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/pathfield" fieldLabel="Image" name="image" rootPath="/content/dam/we-retail/en/people"/> </items> </field> </departments> <activationDate granite:rel="schedule-move-datepicker" jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/datepicker" displayedFormat="&#x9;&#xa;YYYY-MM-DD HH:mm" displayTimezoneMessage="{Boolean}true" emptyText="Select Date &amp; Time" minDate="today" name="scheduleDate" type="date"/> </items> </field> </companies> </items> </column> </items> </content> </jcr:root>

Sling Model -

package com.aem.demo.core.models; import java.util.List; import javax.inject.Inject; import org.apache.sling.api.resource.Resource; import org.apache.sling.models.annotations.DefaultInjectionStrategy; import org.apache.sling.models.annotations.Model; @Model( adaptables = {Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public interface CompaniesModel { @Inject List<Company> getCompanies(); // the name `getCompanies` corresponds to the multifield name="./companies" /** * Company model * has a name and a list of departments */ @Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) interface Company { @586265 String getName(); @586265 List<Department> getDepartments(); // the name `getDepartments` corresponds to the multifield name="./departments" } /** * Department model * has a name and a manager */ @Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) interface Department { @586265 String getImage(); } }

 

Authoring entries -

Content displays on page -

Please review and hope these will help.

Nupur_Jain
Employee
January 28, 2023

Hi @vanshgg 

Hope you are doing well!

 

I see you have used custom code in Post construct method to populate your multifield here. I think you should first change your approach to get data from multifield which is very straight forward. Here is a very good post:

https://aemhints.com/2020/10/24/coral-nested-multifield-aem65/

If you follow this, you dont have to populate data yourself and would be able to make use of sling models concept to the fullest. Let Sling model populate data for you and it will have less chance of any code error.

 

Also, the way you have implemeted it, does not make sense as, each list item in Multilist should have its own NestedList and you have created single Nested List only.

 

Hope it helps!

Thanks

Nupur

kchaurasiya
New Participant
January 28, 2023

@vanshgg  Can you please share the nested multifield dialog node structure details.

manjunathdj
New Participant
January 27, 2023