java - 如何让 StringTemplate V4 忽略 < 作为分隔符?

标签 java stringtemplate stringtemplate-4

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

因此,我正在创建一个组,将分隔符作为参数传递(如 this question 所推荐),但它根本不起作用。

这是我的测试代码:

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!

我在这里错过了什么?

最佳答案

问题是提供给 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# 代码的改编,所以 YMMV。我已尝试确保类型/名称有效且语法正确,但尚未验证。请根据需要随时更新/更正。)

快乐编码。

关于java - 如何让 StringTemplate V4 忽略 < 作为分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11146113/

相关文章:

java - StringTemplate 比普通字符串连接慢?

java - Stringtemplate - 如何将日期格式设置为语言环境格式

java - 为什么 `.read()` 一个数字的方法返回不同的数字

java - 查找数组的模式

java - 在 stringtemplate v4 中实现自定义函数

java - StringTemplate 检查数组在 java 中是否为空

antlr4 - 运行 JSON2XML_ST 时出错

java - 重构java代码

java - Java统计两个数组中匹配元素的个数以及如何生成超过100个

python - 子类 string.Formatter