2015-12-14 29 views
1

我有以下階和碼的freemarker(。):Scala中返回到一些的Freemarker

val cfg = new Configuration(Configuration.VERSION_2_3_23) 
    cfg.setDirectoryForTemplateLoading(new File("/Users/simonshapiro/IdeaProjects/Neo4EmbeddedTest/src/main/scala-2.11/informationModel/kernel/templates")) 
    cfg.setDefaultEncoding("UTF-8") 
    cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER) 
    val template = cfg.getTemplate("test.ftl") 
    val out = new StringWriter 
    val data = new mutable.HashMap[String, Any] 
    data("name") = "fred" 
    data("age") = 27 
    template.process(data, out) 
    println(out.toString) 

test.ftl包含:

Hi ${name}(${age}) 

one two three 

從該短程序的輸出是:

Hi Some(fred)(Some(27)) 

one two three 

如何從生成的模板中得到沒有圍繞字符串值的Some(。)文本的輸出?

回答

3

Freemarker使用map.get("key")來提取模板中的參數。 new mutable.HashMap支持get("key")函數,但它返回Option[Any]而不是值本身。

我建議你用一般的java.util.HashMap來代替。 例如,您可以使用您的地圖轉換成Java:

import scala.collection.JavaConverters._ 
    map.asJava 
1

FreeMarker的地圖通過ObjectWrapper對象模板語言的類型。所以你可以擴展DefaultObjectWrapper來包裝Some -s,然後通過Configuration.setObjectWrapper(ObjectWrapper)設置你自己的ObjectWrapper。請注意,DefaultObjectWrapper已通過添加一些經過特殊處理的類擴展BeansWrapper,因此您可以從源頭獲得想法。