我正在使用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!
我在这里缺少什么?
答案 0 :(得分:4)
问题是提供给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。我已经尝试确保类型/名称有效且语法正确,但尚未验证。可以根据需要随意更新/更正。)< / p>
快乐的编码。
答案 1 :(得分:1)
上面非常有趣的技巧(通过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字符串中的语法变得难以处理,有许多转义...