Mvel подходит для шаблонов JavaScript - PullRequest
2 голосов
/ 13 мая 2011

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

var version = ${appVersion};

Я думал, что MVEL подойдет для этого, но он выглядит слишком умным:

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

barfs с:

[Ошибка: нет такого метода или функции: foo] [Рядом: {... foo (....}] ^ [Строка: 1,Столбец: 0] в org.mvel2.PropertyAccessor.getMethod (PropertyAccessor.java:843) в org.mvel2.PropertyAccessor.getNormal (PropertyAccessor.java:203)

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

спасибо -nikita

1 Ответ

1 голос
/ 29 сентября 2011

Совершенно нормально использовать 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 .

...