Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

Exteding Form Core Component

Avatar

Level 2

I am getting the below error:

JeetendrakumarSa_0-1726825586446.png

Can somebody help to resolve the issue, please?

Below code in the FormRadio.java:

JeetendrakumarSa_0-1726825725600.png

 

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @JeetendrakumarSa ,

Return type should be same or its parent.

OptionItem type should be same com.adobe.cq.wcm.core.components.models.form.OptionItem

cross check your imports in implementation class

seems you are return something.core.models.form.radio.OptionItem instead of com.adobe.cq.wcm.core.components.models.form.OptionItem

Thanks

View solution in original post

4 Replies

Avatar

Correct answer by
Community Advisor

Hi @JeetendrakumarSa ,

Return type should be same or its parent.

OptionItem type should be same com.adobe.cq.wcm.core.components.models.form.OptionItem

cross check your imports in implementation class

seems you are return something.core.models.form.radio.OptionItem instead of com.adobe.cq.wcm.core.components.models.form.OptionItem

Thanks

Avatar

Community Advisor

Hi @JeetendrakumarSa ,

Delete your OptionItem.java  (as not required)  or rename in case getting used in somewhere else in your project or explicitly mention the return type like this

@Override
public List<com.adobe.cq.wcm.core.components.models.form.OptionItem> getItems() {
return items;
}

 

Find below sample code

package com.abc.core.models;

import java.util.List;

import com.adobe.cq.wcm.core.components.models.form.OptionItem;
import com.adobe.cq.wcm.core.components.models.form.Options;

public interface FormRadio extends Options {

String getTitle();

List<OptionItem> getItems();

}

 

 

package com.abc.core.models;

import com.adobe.cq.export.json.ComponentExporter;
import com.adobe.cq.export.json.ExporterConstants;
import com.adobe.cq.wcm.core.components.models.form.OptionItem;
import com.adobe.cq.wcm.core.components.models.form.Options;
import com.adobe.cq.wcm.core.components.util.AbstractComponentImpl;
import lombok.experimental.Delegate;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.models.annotations.*;
import org.apache.sling.models.annotations.injectorspecific.ChildResource;
import org.apache.sling.models.annotations.injectorspecific.Self;
import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
import org.apache.sling.models.annotations.via.ResourceSuperType;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.List;

@Model(adaptables = SlingHttpServletRequest.class, adapters = { FormRadio.class,
ComponentExporter.class }, resourceType = FormRadioImpl.RESOURCE_TYPE, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)

public class FormRadioImpl extends AbstractComponentImpl implements FormRadio {

public static final String RESOURCE_TYPE = "pmi-atomsmolecules/components/core/form/radio";

@Self
@Via(type = ResourceSuperType.class)
@Delegate(excludes = DelegationExclusion.class)

private Options options;

@PostConstruct
public void init() {
this.options = resource.adaptTo(Options.class);
}

@ValueMapValue
private String title;

@ChildResource
private List<OptionItem> items;

@ValueMapValue
@Default(booleanValues = false)
private boolean textIsRich;

public boolean isRichText() {
return textIsRich;
}

@Inject
public FormRadioImpl(SlingHttpServletRequest request) {
this.options = request.adaptTo(Options.class);
}

public Object getFormId() {
return FormUtil.getInheritedFormId(resource);
//return null;
}

@Override
public String getExportedType() {
return FormRadioImpl.RESOURCE_TYPE;
}

@Override
public String getTitle() {
return title != null ? title : options.getTitle();
}


@Override
public List<OptionItem> getItems() {
return items;
}

private interface DelegationExclusion {
String getExportedType();
String getTitle();
}

}

 

Thanks