AEM Slightly - 如何调用名称存储在变量中的 java 方法 - 表达式中的表达式无法正常工作

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

看来我已经初始化了吊索模型class。现在,我想调用 class 中的方法。但是方法名称是从某个变量中读取的(基本上我是从其他位置读取方法名称的)。当我使用该变量时,它不起作用。我知道 sightly 不允许在表达式中使用表达式,所以想知道是否有其他方法可以满足此需求。

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

${detailsModel.{methodNameVariable}} - 不起作用(如果方法名称是从某个变量中读取的) ${detailsModel.methodName} - 有效(如果将方法名称直接放在那里)

这实际上取决于您构建数据模型的方式以及您希望用它做什么。

如果您想做类似 if ... else 的事情,可以通过以下方式实现:

<sly data-sly-test="${condition}">${model.someMethod}</sly>
<sly data-sly-test="${!condition}">${model.otherMethod}</sly>

如果你想做类似switch ... case的事情:

<sly data-sly-test="${condition1}">${model.method1}</sly>
<sly data-sly-test="${condition2}">${model.method2}</sly>
...

如果你想要一个真正的动态方法名称,那么你最好使用一个 returns 值映射的模型,而不是有多个 properties/methods 并使用动态方法名称作为键:

${model.details[detailName]}