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
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

AEM Slightly - How to call java method whose name is stored in variable - expression inside expression doesn’t work in sightly

karanmahi
Level 4
Level 4

In AEM 6.5 sightly I have initialized the sling model class. Now, I want to call the method from that class. But method name is read from some variable (basically I read method name from other location). When I use that variable it doesn’t work. I know sightly doesn’t allow expression inside an expression, so would like to know if there is an alternative to fit this need.

<sly data-sly-use.detailsModel="org.svc.core.model.DetailsModel"/>

${detailsModel.{methodNameVariable}} - doesn’t work (if the method name is read from some  variable) 

 

${detailsModel.methodName} - works (if put the method name directly there)

1 Accepted Solution
Anudeep_Garnepudi
Correct answer by
Community Advisor
Community Advisor

@karanmahi 

I think this is not directly possible. One way you can do is, in your Model class itself call the method inside a getter method and return the value. Call that Sling Model getter method in HTL.

To call method using method name(String/Variable) use reflection API.

Refer: https://www.tutorialspoint.com/How-do-I-invoke-a-Java-method-when-given-the-method-name-as-a-string#....

 

View solution in original post

5 Replies
asutosh_jena
Community Advisor
Community Advisor

Hi @karanmahi 

 

What is the requirement where you are reading the method name from a variable?

You need to call the method directly by the sling model reference to make it work.

<sly data-sly-use.detailsModel="org.svc.core.model.DetailsModel"/>
${detailsModel.methodName}

 

Thanks!

karanmahi
Level 4
Level 4
I have a custom requirement to read method name dynamically from osgi.
Anudeep_Garnepudi
Correct answer by
Community Advisor
Community Advisor

@karanmahi 

I think this is not directly possible. One way you can do is, in your Model class itself call the method inside a getter method and return the value. Call that Sling Model getter method in HTL.

To call method using method name(String/Variable) use reflection API.

Refer: https://www.tutorialspoint.com/How-do-I-invoke-a-Java-method-when-given-the-method-name-as-a-string#....

 

View solution in original post

KiranVedantam1992
Community Advisor
Community Advisor

Hi @karanmahi,

 

If you want to read the method name, create a variable, assign the method name to that variable and fetch it via getter and setter in HTL.

 

Hope this helps.

 

Thanks,

Kiran Vedantam

BrianKasingli
Community Advisor
Community Advisor

@karanmahi you can have your @PostConstruct method invoke your method which will set the variable's value. OR you can ensure that your method is following this naming convention getMyMethod(); from sightly you can call ${detailsModel.myMethod}.

Anything getSomething(); sightly will allow you to call the method in camelCased (in this example ${detailsModel.something);