2012-06-21 35 views
3

我正在使用StringTemplate V4在我的项目中生成一些HTML代码。 我需要在我的模板中使用HTML格式,因此使用默认分隔符<>会非常尴尬。如何获取StringTemplate V4忽略<作为分隔符?

所以,我创建了一个组作为参数传递分隔符(由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

它只适用于模板,但我真的需要使用该组,因为在真正的代码中我需要注册渲染器。 – elias

回答

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我试图确保类型/名称是有效的并且语法正确,但没有验证它,请根据需要随时更新/更正。)

快乐编码。

+1

它的工作!非常感谢你! :) – elias

+0

不客气,上周我也遇到了这个问题:) – 2012-06-21 20:40:48

+0

这样做,这有点奇怪,'defineTemplate(String,String)'方法'有Javadoc注释'测试'。所以这可能不是如何计算的。 – wvdz

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字符串中笨重,与许多逃脱...

相关问题