如何使StringTemplate V4忽略<作为分隔符?

Eli*_*les 4 java stringtemplate stringtemplate-4

我正在使用StringTemplate V4在我的项目中生成一些HTML代码。我需要有HTML格式在我的模板,所以使用默认的分隔符<,并>会非常尴尬。

因此,我正在创建一个将定界符作为参数传递的组(如本问题所建议),但它根本行不通。

这是我的测试代码:

public void testTemplate() {
    char sep = '$';
    STGroup stGroup = new STGroupString("temp",
            "<html>hello, $name$!</html>", sep, sep);
    System.out.println("Group created");
    ST st = stGroup.getInstanceOf("temp");
    if (st == null) {
        System.out.println("Failed to get template!");
    } else {
        st.add("name", "Guest");
        System.out.println("Template initialized correctly");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

temp 1:1: invalid character '<'
temp 1:5: invalid character '>'
temp 1:1: garbled template definition starting at 'html'
temp 1:6: garbled template definition starting at 'hello'
temp 1:13: invalid character '$'
temp 1:18: invalid character '$'
temp 1:19: invalid character '!'
temp 1:21: invalid character '<'
temp 1:22: invalid character '/'
temp 1:14: garbled template definition starting at 'name'
temp 1:26: invalid character '>'
temp 1:22: garbled template definition starting at 'html'
Failed to get template!
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?

小智 5

问题是提供给STGroupString构造函数的模板无效的“组模板”语法。

要获取不需要特殊语法的组模板,请尝试:

STGroup group = new STGroup('$', '$');
group.registerRenderer(...);
CompiledST compiledTemplate = group.defineTemplate("name", ...);
compiledTemplate.hasFormalArgs = false; // very important!

// later on...
ST template = group.getInstanceOf("name");
Run Code Online (Sandbox Code Playgroud)

(以上内容是对我的C#代码的改编,所以是YMMV。我试图确保类型/名称有效且语法正确,但是尚未验证。请根据需要随时更新/更正。)

快乐的编码。