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)
Solved! Go to Solution.
Views
Replies
Total Likes
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.
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!
Views
Replies
Total Likes
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.
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
@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);