Get a data-sly-list element as a jsonarray | Community
Skip to main content
rampai
Community Advisor
Community Advisor
October 11, 2019
Solved

Get a data-sly-list element as a jsonarray

  • October 11, 2019
  • 5 replies
  • 5287 views

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.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Ankur_Khare

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

Gson().toJson("data");

5 replies

ArpitVarshney
Community Advisor
Community Advisor
October 11, 2019

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

Ankur_Khare
Community Advisor
Ankur_KhareCommunity AdvisorAccepted solution
Community Advisor
October 11, 2019

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

Gson().toJson("data");

arunpatidar
Community Advisor
Community Advisor
October 11, 2019

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
rampai
Community Advisor
rampaiCommunity AdvisorAuthor
Community Advisor
October 13, 2019

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

Ankur_Khare
Community Advisor
Community Advisor
October 23, 2019

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