是适合模板JavaScript的

时间:2011-05-13 01:04:40

标签: interpolation mvel

我们需要一些JavaScript代码模板,我们需要使用以下代码插入服务器端:

var version = ${appVersion};

我认为MVEL适合这个,但它看起来太聪明了:

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

barfs with:

  

[错误:没有这样的方法或功能:   foo] [近:{... foo(....}]                    ^ [Line:1,Column:0] at   org.mvel2.PropertyAccessor.getMethod(PropertyAccessor.java:843)     在   org.mvel2.PropertyAccessor.getNormal(PropertyAccessor.java:203)

对于简单的var插值,

是MVEL矫枉过正吗?如果是这样,我应该自己编写,还是有任何java库可以进行简单的变量和POJO插值?

感谢 -nikita

1 个答案:

答案 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);

详细了解MVEL language guideMVEL Templating Introduction