Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

How to dynamically populate different fields on a dialog

anelem1760873
Level 4
Level 4

Hi there,

 

Am trying to show different form fields on a dialog, based on an event.

 

Would appreciate any help.

Experience Manager
1 Accepted Solution
vanegi
Correct answer by
Employee
Employee

For dynamically populating form fields in a dialog box, please check below eg: 

If you want to define a select box by configuring a Select component in dialog.any as follows:

...
/Type "AtomLine"
            /Sub
              {
              /mySelectAtom
                {
                /Type "Select"
                /Option
                  {
                  /option0
                    {
                    /value "red"
                    /text "Scarlet"
                    }
                  /option1
                    {
                    /value "green"
                    /text "Lime"
                    }
                  /option2
                    {
                    /value "blue"
                    /text "Azure"
                    }
                  }
                }
              }
... 

 

 

For this, you can hard code all for the select options in dialog.any. However, you can define and manage these options as an external resource and to populate the dialog dynamically.

Use an OwnerDraw type in dialog.any instead of Select to specify a script that draws a CFC component programmatically. In the script, you can retrieve the values from an external resource and populate the dialog. So, to change the Select example to use an OwnerDraw do the following.

  1. Change dialog.any to call a custom script to draw the form field via OwnerDraw type ... /Type "AtomLine" /Sub { /mySelectAtom { /Type "OwnerDraw" /file "/apps/[yourApp]/components/dynamicDialogComponent/dynamicSelect.esp" } } ... 
  2. Define a Java class to access an external resource and return java.util.Map with all the options. public class DialogValues { public static Map getSelectOptions(String atomName) { Map optionsMap = new LinkedHashMap(); // get select options and put them in a map // ... return optionsMap; } }
  3. Define /apps/[yourApp]/components/dynamicDialogComponent/dynamicSelect.esp that calls the Java class and renders the CFC select object with options returned in java.util.Map. Place the code bellow in dynamicSelect.esp.

The example uses CFC.Controls.Select. But you can use the same OwnerDraw approach with other CFC objects. In fact, you can use the OwnerDraw to draw any section of the dialog which cannot be defined using .any notation.

 

References:

https://helpx.adobe.com/experience-manager/using/creating-touchui-dynamic.html

https://levelup.gitconnected.com/aem-conditionally-show-or-hide-fields-in-touchui-dialogs-with-coral...

 

 

View solution in original post

6 Replies
vanegi
Correct answer by
Employee
Employee

For dynamically populating form fields in a dialog box, please check below eg: 

If you want to define a select box by configuring a Select component in dialog.any as follows:

...
/Type "AtomLine"
            /Sub
              {
              /mySelectAtom
                {
                /Type "Select"
                /Option
                  {
                  /option0
                    {
                    /value "red"
                    /text "Scarlet"
                    }
                  /option1
                    {
                    /value "green"
                    /text "Lime"
                    }
                  /option2
                    {
                    /value "blue"
                    /text "Azure"
                    }
                  }
                }
              }
... 

 

 

For this, you can hard code all for the select options in dialog.any. However, you can define and manage these options as an external resource and to populate the dialog dynamically.

Use an OwnerDraw type in dialog.any instead of Select to specify a script that draws a CFC component programmatically. In the script, you can retrieve the values from an external resource and populate the dialog. So, to change the Select example to use an OwnerDraw do the following.

  1. Change dialog.any to call a custom script to draw the form field via OwnerDraw type ... /Type "AtomLine" /Sub { /mySelectAtom { /Type "OwnerDraw" /file "/apps/[yourApp]/components/dynamicDialogComponent/dynamicSelect.esp" } } ... 
  2. Define a Java class to access an external resource and return java.util.Map with all the options. public class DialogValues { public static Map getSelectOptions(String atomName) { Map optionsMap = new LinkedHashMap(); // get select options and put them in a map // ... return optionsMap; } }
  3. Define /apps/[yourApp]/components/dynamicDialogComponent/dynamicSelect.esp that calls the Java class and renders the CFC select object with options returned in java.util.Map. Place the code bellow in dynamicSelect.esp.

The example uses CFC.Controls.Select. But you can use the same OwnerDraw approach with other CFC objects. In fact, you can use the OwnerDraw to draw any section of the dialog which cannot be defined using .any notation.

 

References:

https://helpx.adobe.com/experience-manager/using/creating-touchui-dynamic.html

https://levelup.gitconnected.com/aem-conditionally-show-or-hide-fields-in-touchui-dialogs-with-coral...

 

 

View solution in original post

anelem1760873
Level 4
Level 4
To be honest I don't know any of this, And i don't know how is this marked as the correct answer.
anelem1760873
Level 4
Level 4

The List looks like this, so i need to build the dialog with these values.

[ComplexResourceWrapper, type=granite/ui/components/foundation/form/textfield, path=/apps/project/item_0, resource=[JcrNodeResource, type=nt:unstructured, superType=null, path=apps/project/item_0], ComplexResourceWrapper, type=granite/ui/components/foundation/form/textfield, path=apps/project/item_1, resource=[JcrNodeResource, type=nt:unstructured, superType=null, path=apps/project/item_1]]

anelem1760873
Level 4
Level 4
Hi Nikhil, Basically i have a servlet which returns a collection of resources, its being called on the dropdown change.