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
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Sightly Code to iterate over Map which is list of String - Does not work in 6.3

Avatar

Level 3

Hi All,

We have sightly code which was working fine in 6.1 and stopped working in 6.3.

Code to iterate over Map which is a list of String.

Sightly (HTL)

<sly data-sly-use.table="${'my.models.Table'}">

     <div>

          <table data-sly-list.row="${table.rowList}">

               <tr data-sly-list.columnCell="${table.rowList[row]}">

                    <td>

                          ${columnCell}

                    </td>

               </tr>

          </table>           

     </div>

</sly>

       

Model Java:

Map<Integer,List<String>> myMap = new HashMap<Integer,List<String>>();

  

    for(int i=1;i<=3;i++)

    {

         List<String> list = new ArrayList<String>();

         list.add("" + i);

         list.add("" + i*i);

         list.add("" + i*i*i);

  

         myMap.put(new Integer(i-1),list);

    }

This sightly code stops working where ${table.rowList[row]} always returns null and hence inner loop does not execute.

Is there any change in 6.3 with respect to sightly where rowList[row] kind of notation is disabled ? Could not find something similar on google.

I also tried iterator way and passed the item in the array index. But that also does not solve the issue.

3 Replies

Avatar

Level 3

The way I fixed it was by converting the Map key from Integer to String.

myMap.put(Integer.parseInt(i-1),list)

No change in Sightly component.

Not sure how this worked in 6.1 and not in 6.3.

kautuksahni​ / smacdonald2008​ : Have you heard about this type of issue before ?

Avatar

Level 3

And we were able to identify the same pattern for 2 other components and fix it in the same way.

Basically the array notation with square bracket is not working where the Model is returning HashMap(Interger,List<Object>).

Avatar

Administrator

Can you quickly try with Map<Integer,String> myMap = new HashMap<Integer,String>(); ?

Avatar

Level 10

Actually the above article - shows use of Sling Models and a Multi-field. Its useful but does not show use of a Java collection. See this 6.2 artilce where we use WCMUSePojo and show use of a Java collection in the Java code and how to render the values: Adobe Experience Manager Help | Creating an Adobe Experience Manager HTL component that displays a r...

Avatar

Level 3

Hi smacdonald2008​:

Thanks for the article but that uses a normal java collection and I have evidences in my code that this works fine.

The issue we are observing is especially when there is a key which is Integer object and in sightly we use [] notation. See my code above. This used to work fine in 6.1