Expand my Community achievements bar.

Enhance your AEM Assets & Boost Your Development: [AEM Gems | June 19, 2024] Improving the Developer Experience with New APIs and Events
SOLVED

How to check the size of list in sightly?

Avatar

Level 7

[Thread Edited By Adobe]

/*Don’t forget to meet and greet your fellow peers virtually by telling them about yourself here

Go ahead and to it now: https://adobe.ly/3eDnB4v */

 

Actual Post:

Hi,

I need to check size of the list in sightly. I need to display UI only when it has more than 2 items in list. Any idea?

Thanks,

Arya.

1 Accepted Solution

Avatar

Correct answer by
Employee

Depending on the methods of your list-object you can do something like this:

<div data-sly-test="${yourList.size > 2}">

...

</div>

View solution in original post

16 Replies

Avatar

Correct answer by
Employee

Depending on the methods of your list-object you can do something like this:

<div data-sly-test="${yourList.size > 2}">

...

</div>

Avatar

Level 7

Hi Feike,

Thanks. I have gone through sightly tutorials. But I didn't find this attribute. Actually we have size() for java.util.ArrayList. Can I use all of List methods like mylist.<ListMethod> ? Where can I find these tutorials? I have seen only count,first,last,index etc.

 

Thanks,

Arya.

Avatar

Employee

hi arya,

You can just the methods from the object, whether that is List, Array etc.

So if you have .size(), you can use .size. If you have .length() or .count(). You can use .length or .count.

Hope this helps.

Inside your list, you can use things like ${itemList.count}, but this only works inside data-sly-list:

<ul data-sly-list="${currentPage.listChildren}">

<li>${item.name} Page ${itemList.index} of ${itemList.count}</li>

</ul> 

--
Feike

Avatar

Level 1

This answer is no longer valid. As far as I can tell, the only way to accomplish this is to create another method in the initialized bean that returns the size of the list.

Avatar

Employee

It indeed depends what kinds of object you are using for the list object.

Avatar

Level 4

I also find it very helpful to use the Ternary Operator in conjunction with the size/length to optionally add classes to an element. Just another front-end tip.

<div class="image-grid-item ${(properties['imageTiles'].length > 3 && rowList.count == 3 ) ? 'image-grid-item_bigger' : ''}"> </div>

Avatar

Level 3

Hi Felke.

On trying the snippet as below:

    <div data-sly-test="${myList.size > 5}" data-sly-unwrap>

  Heloo!!!!!

        </div>

We get an error as:

Invalid types in comparison. Comparison is supported for Number types only.

Could you please throw some light on why this could be the case?

Thanks,

Hemant Bellani

Avatar

Level 3

// The WCMUse class' method that gives me an ArrayList

public List<String> getAllColumns() {

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

  for (int i = 1; i <= 10; i++) {

    allColumns.add("Test" + "-" + i);

  }

  return allColumns;

  }

 

  # sightly code that I am trying out ....

<sly data-sly-list.myList="${myWCMUseObject.allColumns}">

  <div data-sly-test="${myList.size > 5}" data-sly-unwrap>

  Heloo!!!!!

        </div>

</sly>

Avatar

Level 2

<div data-sly-test="${myListList.size > 5}" data-sly-unwrap>

Give like the above it will work..

Avatar

Level 1

We can create a variable like this if list size is small, e.g. total is a variable created here which can be used further where ever size is required we can use this total object

<sly data-sly-list.listObj="${object.mylist}">
          <sly data-sly-test="${listObjList.last}">
            <sly data-sly-test.total="${listObjList.count}" />
      </sly>
</sly>

for example if I need to test if size is 2. We can use statement like 

data-sly-test="${total>2}"