2012-06-21 36 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字符串中笨重,與許多逃脫...

相關問題