gpt4 book ai didi

java - 将java代码嵌入到模板中

转载 作者:行者123 更新时间:2023-11-30 03:45:25 28 4
gpt4 key购买 nike

是否可以在 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 函数。

最佳答案

不,不打算/未提供嵌入到模板中的 java 代码。这使得更容易防止 View 和模型/逻辑的困惑/混合。

在你的例子中,你可以轻松地将计算出的东西放入java属性getter函数中,它可以被StringTemplate作为一种bean属性引用和评估。

例如

放入您的模板组文件 MyTemplate.stg :

myTemplate(f) ::= <<
...
Blabla <f.message> blabla
...
>>

放入您的 Java 源代码:

class MyClass() {
...
private String internal_message;
public getMessage() {
return internal_message;
}
...
}

调用模板:

STGroupFile stg = new STGroupFile("MyTemplate.stg");
ST templ = stg.getInstanceOf("myTemplate");
templ.add("f", new MyClass());

这样,模板逻辑 <f.message>调用getMessage()您的 java 对象实例的 f .

关于java - 将java代码嵌入到模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25864154/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com