Как я могу выставить постоянные значения в MVEL? - PullRequest
1 голос
/ 26 апреля 2011

У меня есть константа, которую я хочу импортировать / выставить для MVEL выражений:

public static final String PRODUCT_NAME;

Я знаю, что могу импортировать классы, пакеты и статические методы, используя addImport , но константы не поддерживаются.

Я смотрел на написание пользовательского VariableResolver , но это выглядит как перебор. Есть ли более простой способ сделать это?

[Изменить] Чтобы было ясно, я хочу иметь возможность сделать это в моих выражениях:

"Thanks for using " + PRODUCT_NAME

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Вы можете напрямую ссылаться на него, используя полное имя: org.foo.Bar.PRODUCT_NAME

-или-

Программный импорт можно использовать с помощью компилятора MVEL:

ParserContext ctx = ParserContext.create();
ctx.addImport(YourClass.class);

String expr = "YourClass.PRODUCT_NAME";
Serializable compiled = MVEL.compileExpreasion(expr, ctx);
Object result = MVEL.executeExpression(compiled);
0 голосов
/ 26 апреля 2011

Я сам новичок в MVEL. Но я думаю, что это должно сработать.

Возможно, я неправильно понял вашу фразу. Я предполагаю, что вы ищете способ доступа к константам.

Объявление стороны Java:

public class Product{
   public static final String PRODUCT_NAME = "TEST";
}

В файле правил: -

import org.sample.Product;

rule "Test"
    no-loop true
    lock-on-active true
    when
       eval(true);
    then
        System.out.println(Product.PRODUCT_NAME); #prints TEST

  end
0 голосов
/ 26 апреля 2011

Я не знаю MVEL, но если вы скажете, что можете импортировать статические методы, тогда вы должны сделать это вместо этого:

public static final String PRODUCT_NAME = "My cool product";
public static final String getProductName() {
   return PRODUCT_NAME;
}
...