是否可以在 ST4 模板中嵌入可执行的 java 代码?例如,如果我想将一个字符串传递给我的模板,它有时会按原样打印字符串,有时会以大写形式打印它,所以我想要一个 java 代码来进行必要的转换。如果没有此功能,我看到了 3 种实现相同功能的方法:
(1)预先计算java中的替代值,并一次性将它们全部传递给模板(但这可能会导致参数过多):
// in the below code, if the template can compute DESCRIPTION_CAPS from DESCRIPTION, using embedded java code, that reduces one argument
test(DESCRIPTION, DESCRIPTION_CAPS) ::= <<
this is original <DESCRIPTION>
this is caps <DESCRIPTION_CAPS>
>>
(2) 如果这样的参数太多,另一种选择是将模板分解成更小的部分,但这会使代码变得丑陋且不可读:
test1(DESCRIPTION) ::= <<
this is original <DESCRIPTION>
>>
test2(DESCRIPTION_CAPS) ::= <<
this is caps <DESCRIPTION_CAPS>
>>
(3) 预先计算类内部所有相关值,让模板调用getter函数(不带参数)简单地从类中获取相关值。
test() ::= <<
this is original <values.description>
this is caps <values.description_caps>
>>
截至目前(如果嵌入的 java 类不可用),第三个选项看起来是最好的解决方案。请告知是否存在更好的解决方案。
注意:在上面的示例中,我仅使用 CAPS 作为示例,可能还需要更复杂的 java 函数。