2

次のようなコードでサーバー側を補間する必要がある JavaScript コード テンプレートがいくつかあります。

var version = ${appVersion};

これには MVEL が適していると思いましたが、スマートすぎるようです。

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

次のバーフ:

[エラー: そのようなメソッドまたは関数はありません: foo] [近く: {... foo( ....}] ^ [行: 1、列: 0] org.mvel2.PropertyAccessor.getMethod(PropertyAccessor.java:843) ) org.mvel2.PropertyAccessor.getNormal(PropertyAccessor.java:203) で

単純な var 補間の MVEL はやり過ぎですか? もしそうなら、私は自分で書くべきですか、それとも単純な変数と POJO 補間を行う Java ライブラリはありますか?

ありがとう -ニキータ

4

1 に答える 1

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言語ガイドおよびMVELテンプレートの概要を参照してください。

于 2011-09-29T03:09:50.220 に答える