Expand my Community achievements bar.

Radically easy to access on brand approved content for distribution and omnichannel performant delivery. AEM Assets Content Hub and Dynamic Media with OpenAPI capabilities is now GA.
SOLVED

Get a data-sly-list element as a jsonarray

Avatar

Level 6

How can we pass a list from HTL to a sling model?

I need a nested list to be converted into JsonArray format.

<div data-sly-list="${values}">

     <h1>${item.title}</h1>

     <p>${item.description}</p>

</div>

Now I want the same thing as a json string from ${values}:

[{"title":"test1", "description":"desc1"},{"title":"test2", "description":"desc2"}]

Any inputs would be helpful.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

In your java class you can convert the data to json using GSON and send back to frontend -

Gson().toJson("data");

View solution in original post

5 Replies

Avatar

Community Advisor

Hi,

Please refer below to pass data from sightly to sling model:

https://sling.apache.org/documentation/bundles/scripting/scripting-htl.html#passing-parameters

After passing the data to sling model you can write your custom code in Sling model to convert it to json.

Regards,

Arpit Varshney

Avatar

Correct answer by
Community Advisor

In your java class you can convert the data to json using GSON and send back to frontend -

Gson().toJson("data");

Avatar

Community Advisor

Create a sling model and adapt usiing SlingHttpServletRequest.class

Example:

<!-- info.html -->

<div data-sly-use.info="${'TestModel' @ text='Some text'}">

    <p>${info.reversed}</p>

</div>

Sling model

import org.apache.sling.api.SlingHttpServletRequest; 

import org.apache.sling.models.annotations.Model; 

import org.apache.sling.models.annotations.Optional; 

import org.apache.sling.models.annotations.injectorspecific.RequestAttribute; 

 

 

@Model(adaptables = SlingHttpServletRequest.class) 

public class TestModel { 

@RequestAttribute 

@Optional 

private String text; 

@PostConstruct 

    public void init() { 

        //we can read the values directly here. 

    } 



Arun Patidar

Avatar

Level 6

Thanks. This is precisely what I did in the end.

Avatar

Community Advisor

Could you pls mark it as correct so that it will help others as well..