如何获得StringTemplate的V4忽略<作为分隔符?(How to get Strin

2019-09-18 09:09发布

我使用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");
    }
}

这是我得到的输出:

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!

我缺少的是在这里吗?

Answer 1:

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

为了得到这并不需要特殊的语法尝试组模板:

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

// later on...
ST template = group.getInstanceOf("name");

(这上面是我的C#代码,以便因人而异的适应。我试图确保类型/名称是有效的,语法是正确的,但还没有证实此事。根据需要随意更新/正确的。)

编码愉快。



Answer 2:

非常有趣的把戏以上(由PST),这也给了一个暗示:“没有有效的组模板语法”。

所以,以供参考,在这里是用这样一组有效的语法替代他的代码,:

 STGroup groupS = new STGroupString("some group", "val(value) ::= \"<span>Value is {value; format=\\\"%1.5f\\\"}</span>\"", '{', '}');
 groupS.registerRenderer(Number.class, new NumberRenderer());
 ST valTpl = groupS.getInstanceOf("val");
 valTpl.add("value", 3.14159265358979353);
 System.out.println(valTpl.render());

语法成为Java字符串中笨重,与许多逃脱...



文章来源: How to get StringTemplate V4 to ignore < as delimiter?