2011-05-13 47 views
2

我們有我們需要像代碼進行插值服務器端JavaScript代碼模板:是MVEL適合模板化的JavaScript

var version = ${appVersion}; 

我想MVEL將適用於這一點,但它似乎是太聰明瞭:

String input = "foo()"; 
    assertEquals(input, MVEL.evalToString(input)); 

barfs有:

[Error: no such method or function: foo] [Near : {... foo(....}] ^[Line: 1, Column: 0] at org.mvel2.PropertyAccessor.getMethod(PropertyAccessor.java:843) at org.mvel2.PropertyAccessor.getNormal(PropertyAccessor.java:203)

是MVEL矯枉過正簡單變種插值?如果是這樣,我應該寫我自己的,還是有任何Java庫執行簡單變量和POJO插值?

感謝 -nikita

回答

1

這是完全正常使用MVEL這種類型的模板的。

問題是您正在執行MVEL類上的方法。該類中的方法用於評估和編譯MVEL表達式,而不是模板。

你實際上是後是什麼如下:

TemplateRuntime.eval(...) 

改變上述以下工作的例子:

String input = "foo()"; 
assertEquals(input, TemplateRuntime.eval(input, new HashMap())); 

地圖傳給eval方法是可變分辨率。例如

String input = "foo(@{myVar});"; 
Map vars = new HashMap(); 
vars.put("myVar", "bar"); 
Object eval = TemplateRuntime.eval(input, vars); 
assertEquals("foo(bar);", eval); 

以通過MVEL language guideMVEL Templating Introduction更多細節看看。

+0

MVEL模板指南鏈接不可用,任何替換? – bennyl 2015-09-06 22:56:30

+0

@bennyl:文檔鏈接已更新。我不認爲它們完全一樣,但它們可能就足夠了。 – bradhouse 2015-09-09 09:20:22