1

我有一个要导入/公开给MVEL表达式的常量:

public static final String PRODUCT_NAME;

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

我看过编写一个自定义的 VariableResolver,但它看起来有点矫枉过正。有没有更简单的方法来做到这一点?

[编辑]为了清楚起见,我希望能够在我的表达中做到这一点:

"Thanks for using " + PRODUCT_NAME
4

3 回答 3

2

您可以使用完全限定名称直接引用它: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);
于 2011-04-28T04:17:55.903 回答
0

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

public static final String PRODUCT_NAME = "My cool product";
public static final String getProductName() {
   return PRODUCT_NAME;
}
于 2011-04-26T13:30:25.757 回答
-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
于 2011-04-26T15:20:26.957 回答