我们需要一些JavaScript代码模板,我们需要使用以下代码插入服务器端:
var version = ${appVersion};
我认为MVEL适合这个,但它看起来太聪明了:
String input = "foo()";
assertEquals(input, MVEL.evalToString(input));
barfs with:
对于简单的var插值,[错误:没有这样的方法或功能: foo] [近:{... foo(....}] ^ [Line:1,Column:0] at org.mvel2.PropertyAccessor.getMethod(PropertyAccessor.java:843) 在 org.mvel2.PropertyAccessor.getNormal(PropertyAccessor.java:203)
是MVEL矫枉过正吗?如果是这样,我应该自己编写,还是有任何java库可以进行简单的变量和POJO插值?
感谢 -nikita
答案 0 :(得分:1)
将MVEL用于此类模板是完全正确的。
问题是你正在MVEL类上执行方法。此类的方法旨在评估和编译MVEL表达式,而不是模板。
你真正追求的是:
TemplateRuntime.eval(...)
将您的示例更改为以下作品:
String input = "foo()";
assertEquals(input, TemplateRuntime.eval(input, new HashMap()));
传递给eval方法的Map用于可变分辨率。 e.g。
String input = "foo(@{myVar});";
Map vars = new HashMap();
vars.put("myVar", "bar");
Object eval = TemplateRuntime.eval(input, vars);
assertEquals("foo(bar);", eval);