2011-05-13 78 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