подходит ли mvel для шаблонизации JavaScript

У нас есть несколько шаблонов кода JavaScript, которые нам нужно интерполировать на стороне сервера с помощью кода, например:

var version = ${appVersion};

Я думал, что для этого подойдет МВЭЛ, но он оказался слишком умным:

    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)

Является ли MVEL излишним для простой интерполяции переменных? Если да, то должен ли я просто написать свой собственный или есть какие-либо java-библиотеки, которые выполняют простую переменную и интерполяцию POJO?

спасибо - никита


person Nikita    schedule 13.05.2011    source источник


Ответы (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 для получения более подробной информации.

person Bradley Dwyer    schedule 29.09.2011
comment
Ссылка на руководство по шаблонам MVEL недоступна, какая-либо замена? - person bennyl; 07.09.2015
comment
@bennyl: ссылки на документацию обновлены. Я не думаю, что они точно такие же, но их может быть достаточно. - person Bradley Dwyer; 09.09.2015