Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

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

Avatar

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

Avatar

Correct answer by
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

Avatar

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!

Avatar

Level 4
I have a custom requirement to read method name dynamically from osgi.

Avatar

Correct answer by
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#....

 

Avatar

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

Avatar

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