DataSource in AEM

14/05/2019

Dynamically Populate DropDown

Java Class

import com.adobe.cq.commerce.common.ValueMapDecorator;
import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.EmptyDataSource;
import com.adobe.granite.ui.components.ds.SimpleDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import com.day.crx.JcrConstants;
import org.apache.commons.collections4.iterators.TransformIterator;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.Servlet;
import java.util.*;
@Component(
service = Servlet.class,
property = {
Constants.SERVICE_DESCRIPTION + "= Dynamic Drop Down",
"sling.servlet.resourceTypes=" + "apps/sizedatasource"
})
public class SizeDataSource extends SlingSafeMethodsServlet {
private static Logger logger = LoggerFactory.getLogger(SizeDataSource.class);
@Override
protected void doGet(SlingHttpServletRequest request,
SlingHttpServletResponse response) {
try {
request.setAttribute(DataSource.class.getName(), EmptyDataSource.instance());
ResourceResolver resolver = request.getResourceResolver();
// Create an ArrayList to hold data
List<Resource> fakeResourceList = new ArrayList<Resource>();
ValueMap vm = null;
String[] test = { "mi", "csk ", "dc"};
// Add values to drop down!
for (int i = 0; i < test.length; i++) {
// allocate memory to the Map instance
vm = new ValueMapDecorator(new HashMap<String, Object>());
// Specify the value and text values
String Value = test[i].trim();
String Text = test[i].trim();
// populate the map
vm.put("value", Value);
vm.put("text", Text);
if(i==100) {
vm.put("selected", true);
}
fakeResourceList.add(new ValueMapResource(resolver, new ResourceMetadata(), "nt:unstructured", vm));
}
// Create a DataSource that is used to populate the drop-down control
DataSource ds = new SimpleDataSource(fakeResourceList.iterator());
request.setAttribute(DataSource.class.getName(), ds);
} catch (Exception e) {
logger.info("Error in Get Drop Down Values", e);
}
}
}

© 2019 TheVoiceOfDesmond. All rights reserved.
Powered by Webnode
Create your website for free! This website was made with Webnode. Create your own for free today! Get started