如何在MVEL中公开常量值?

时间:2011-04-26 13:24:45

标签: java reflection scripting mvel

我有一个常量,我想导入/公开MVEL表达式:

public static final String PRODUCT_NAME;

我知道我可以使用addImport导入类,包和静态方法,但是不支持常量。

我看过写custom VariableResolver,但看起来有些过分。有更简单的方法吗?

[编辑]要明确,我希望能够在我的表达式中执行此操作:

"Thanks for using " + PRODUCT_NAME

3 个答案:

答案 0 :(得分:2)

您可以使用完全限定名称直接引用它:org.foo.Bar.PRODUCT_NAME

-OR -

您可以使用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);

答案 1 :(得分:0)

我不知道MVEL,但如果你说你可以导入静态方法,那么你应该能够这样做:

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

答案 2 :(得分:-1)

我自己对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