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]}
看来我已经初始化了吊索模型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]}