Default value to select in Dropdown AEM 6.4

brijesht7477132

22-07-2018

Hi All,

We have a requirement that in the Touch UI dropdowns we have to populate the value dynamically(some logic) using datasource. Now there is 3 drop down in a dilaog and 3 dropdown should have 3 different default value . The datasource is same for all three dropdown. Is there any way in AEM 6.4 to set the default value in  dialog. We are able to populate the values in dropdown using datasource but not able to set the default values.

sling:ResourceType: granite/ui/components/foundation/form/select

Also is AEM 6.4  provides typehead or Autocomplete drops down? we required this because the dropdown list is too large.

Appreciate for your response .

Accepted Solutions (0)

Answers (4)

Answers (4)

brijesht7477132

22-07-2018

Hi Arun,

Thanks for the response. As you suggested putting  vm.put("selected",true), The code started breaking with the below exception. It successfully set the selected to true but later it break and once i remove the selected to true it works fine

Can you kindly guide or share your code snippet. Also below sharing my lines of code.

Code

ValueMap labelValues = new ValueMapDecorator(new HashMap<String, Object>());

String labelKey = (String)labelhit.getResource().getValueMap().get(FollettConstants.LABELKEY_PROPERTY,null);

if(! StringUtils.isEmpty("author_by_prefix") && "author_by_prefix".equals(labelKey)) {

labelValues.put("selected", true);

}

labelValues.put("text", labelKey);

labelValues.put("value", labelKey+FollettConstants.HASH_SEPRATOR+labelhit.getPath());

labelList.add(new ValueMapResource(resourceResolver, new ResourceMetadata(),

     "nt:unstructured", labelValues));

    DataSource dataSource = new SimpleDataSource(labelList.iterator());

            request.setAttribute(DataSource.class.getName(), dataSource);

Exception

  23.07.2018 01:36:55.941 *ERROR* [0:0:0:0:0:0:0:1 [1532289997383] GET /mnt/override/apps/follett/components/content/labeldemo/pdpmappedlabels/_cq_dialog.html/content/follett/en/tcustore/pdppage/jcr:content/par/pdpmappedlabels HTTP/1.1] org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Uncaught SlingException

org.apache.sling.api.request.RecursionTooDeepException: /mnt/override/apps/follett/components/content/labeldemo/pdpmappedlabels/cq:dialog/content/items/mappedlabel/items/column/items/addtobag

at org.apache.sling.engine.impl.request.RequestData.setContent(RequestData.java:571) [org.apache.sling.engine:2.6.12]

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.dispatchRequest(SlingRequestProcessorImpl.java:311) [org.apache.sling.engine:2.6.12]

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.dispatch(SlingRequestDispatcher.java:211) [org.apache.sling.engine:2.6.12]

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.include(SlingRequestDispatcher.java:104) [org.apache.sling.engine:2.6.12]

Arun_Patidar

MVP

22-07-2018

I tested emptyText  in AEM 6.3, it works with datasource if you use Coral3 components.

granite/ui/components/coral/foundation/form/select

You might be using Coral2 components granite/ui/components/foundation/form/select

Yes, It is possible to pass value in datasource, just create a property in datasource node and assign any value.

In servlet get the request path and from request path get datasource node resource and adaptTo Node and get property value and use it in servlet.

e.g. I created  dropdownSource property in datasource node and accessing using below code

  resourcePath = request.getRequestPathInfo().getResourcePath();

  resourcePath = resourcePath.replaceFirst("/.*(apps/)(.*$)", "/$1$2/");

  logger.info(resourcePath);

  Node itemNode = request.getResourceResolver().getResource(resourcePath).adaptTo(Node.class);

  if(itemNode.hasProperty("dropdownSource")) {

// do something

}

Thanks

Arun

brijesht7477132

22-07-2018

Hi Arun,

Thanks for your response. Actually we need something like emptyText which can handle at front end. I tried using emptyText but with datasource it is not working.

Also is it possible to pass any parameter form the datasource to java class ?

Arun_Patidar

MVP

22-07-2018

Hi,

How are you setting default value from datasource?

for me works fine to set default value for desire item(option)

vm.put("value", Value);

vm.put("text", Text);

vm.put("selected", true);

Request you to move this in AEM community.

Thanks

Arun