繁体   English   中英

如何在MVEL中公开常量值?

[英]How can I expose constant values in MVEL?

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

public static final String PRODUCT_NAME;

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

我看过编写自定义VariableResolver的过程,但看起来有点过头了。 有没有更简单的方法可以做到这一点?

[编辑]要清楚,我希望能够在表达式中做到这一点:

"Thanks for using " + PRODUCT_NAME

您可以使用完全限定的名称直接引用它: 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);

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM