Java 如何让StringTemplate V4忽略<;作为分隔符?

Java 如何让StringTemplate V4忽略<;作为分隔符?,java,stringtemplate,stringtemplate-4,Java,Stringtemplate,Stringtemplate 4,我正在使用StringTemplateV4在我的项目中生成一些HTML代码。 我需要在模板中设置HTML格式,因此使用默认分隔符将非常尴尬 因此,我创建了一个将分隔符作为参数传递的组(如所建议的),但它根本不起作用 以下是我的测试代码: public void testTemplate() { char sep = '$'; STGroup stGroup = new STGroupString("temp", "<html>hello, $n

我正在使用StringTemplateV4在我的项目中生成一些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");
    }
}
public void testTemplate(){
char sep=“$”;
STGroup STGroup=新的STGroupString(“临时”,
“你好,$name$!”,九月,九月);
System.out.println(“集团创建”);
ST ST=stGroup.getInstanceOf(“temp”);
if(st==null){
System.out.println(“获取模板失败!”);
}否则{
st.add(“姓名”、“客人”);
System.out.println(“模板正确初始化”);
}
}
这是我得到的输出:

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!
temp1:1:无效字符“”
temp 1:1:从“html”开始的乱码模板定义
temp 1:6:从“hello”开始的混乱模板定义
临时1:13:无效字符“$”
临时1:18:无效字符“$”
临时1:19:无效字符“!”
临时1:21:无效字符“”
temp 1:22:从“html”开始的乱码模板定义
获取模板失败!

这里缺少什么?

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


愉快的编码。

上面的技巧非常有趣(由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());
stgroupgroups=newstgroupstring(“某个组”,“val(value)::=\”值为{value;格式=\\\%1.5f\\\”}\,'{','}');
groupS.registerRenderer(Number.class,newnumberRenderer());
ST valTpl=groupS.getInstanceOf(“val”);
增值税(“价值”,3.14159265358979353);
System.out.println(valTpl.render());

Java字符串中的语法变得笨拙,有许多转义…

它只适用于模板,但我确实需要使用组,因为在实际代码中我需要注册渲染器。这样做,方法“defineTemplate(String,String)`具有用于测试的Javadoc注释
,这有点奇怪。所以这可能不是它的初衷。