How to pass parameters to Sling Modal from Sightly Component | Community
Skip to main content
Level 3
June 8, 2017
Solved

How to pass parameters to Sling Modal from Sightly Component

  • June 8, 2017
  • 16 replies
  • 29773 views

Hi ,

I am trying to pass some custom parameters from my Sightly Component to Sling Model. But I am not able to read those passed parameters inside my Sling Model.

Below is my sightly code :

<sly data-sly-use.mySlingModal="${'com.adobe.website.models.ImageModel' @ colour='red', path=resource.path}"></sly>

How to read color and path in side my sling model java class.

Can you please help me in solving this.

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 Eakambaram

Thank you all for responding. We  have solved it as below.

@Model({adaptables=Resource.class, adaptables=SlingHttpServletRequest.class)

So that at the same time I will get my resource/Node/Content properties and the values passed to my sling modal from my sightly component.

16 replies

Level 3
November 5, 2017

@Model({adaptables=Resource.class, adaptables=SlingHttpServletRequest.class}).

I was trying to pass some parameters/values from my sighlty html to my sling model, once we receive those parameters in our java we have some custom process requirement for those parameters and have to return some value found in repository to sighlty.

You can try the adaptables way. Another way is we can change our approach from sling model to wcmuse pojo way for this component alone.

Sighlty code snippet for passing some parameters (Those parameters are not authored by the author) from sightly component to Java/WCMUsePojo class

<sly data-sly-use.customPropReader="${'com.yourcompany.division.project.CustomPropReader' @ properties='prop1,prop2'}"></sly>

WCM use pojo Java code to read those parameters.

public class CustomPropReader extends WCMUsePojo {

/**

* custom biz logic applied value map

*/

private HashMap customProcessedProps;

@Override

public void activate() {

String property = get("properties", String.class) != null ? get("properties", String.class) : "";

String[] propertyList = property.split(",");

//We will get all values in propertyList string array. We can loop through those each value and apply custom logic

//One we got the results we can send them back to Sightly

customProcessedProps = new HashMap<String, String> ();

for (String property : propertyList) {

//apply custom logic to each property string and put that in map.

customProcessedProps.put(property, applyCustomBizLogic(property));

}

}

/**

* get ValueMap of inheritedPageProperties

*

* @return HashMap

*/

public HashMap getCustomProcessedProp() {

return customProcessedProps;

}

}

Level 5
November 7, 2017

Thanks.

Adobe recommends to use sling model instead of WCMUsePoJo. I was curious how to adaptable two classes in above examples.

smacdonald2008
Level 10
November 7, 2017

WCMUsePojo is a valid way if you prefer to use over Sling Models,

susheel
Level 5
March 8, 2018

We can do with sling models as below:

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 test;

@PostConstruct

    public void init() {

        //we can read the values directly here.

    }

}

<sly data-sly-use.mySlingModal="${'TestModel' @ test='red'}"></sly>

smacdonald2008
Level 10
March 9, 2018

Here is HTL and Sling models -- Adobe Experience Manager Help | Creating a HTL Repeating Data Set 6.3 Component that uses Sling Models

Using this approach - as you see - very little Java code. 

rampai
Community Advisor
Community Advisor
July 25, 2019

Hi,

Correction in this for the curly braces: @Model(adaptables = {Resource.class, SlingHttpServletRequest.class})