2

我们有一些 JavaScript 代码模板,我们需要在服务器端插入如下代码:

var version = ${appVersion};

我认为 MVEL 会适合这个,但它似乎太聪明了:

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

与:

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

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

谢谢-尼基塔

4

1 回答 1

1

将 MVEL 用于这种类型的模板非常好。

问题是您正在 MVEL 类上执行方法。此类上的方法旨在评估和编译 MVEL 表达式,而不是模板。

您实际追求的是以下内容:

TemplateRuntime.eval(...)

改变上面的例子如下工作:

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

传递给 eval 方法的 Map 用于变量解析。例如

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

查看MVEL 语言指南MVEL 模板介绍了解更多详细信息。

于 2011-09-29T03:09:50.220 回答