为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 MVEL 表达式中使用变量?

如何在 MVEL 表达式中使用变量?

白板的微信 2024-01-05 10:53:46
我的 Java 代码中有预定义的变量,我想在 MVEL 表达式中使用它们。我不想传递上下文。String Col1 = "C";String Col2 = "D";String expression = "Col1 == 'C' && Col2 == 'D'";Boolean result = (Boolean) MVEL.eval(expression);如何读取变量值并将表达式计算为 true 或 false?
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您需要将变量添加col1到col2上下文对象中,然后将该对象传递给MVEL.eval. 下面给出的是工作示例:


import java.util.HashMap;

import java.util.Map;


import org.mvel2.MVEL;


public class Test {

    public static void main(String[] args) {

        Map<String, Object> context = new HashMap<String, Object>();


        String col1 = "C";

        String col2 = "D";


        context.put("col1", col1);

        context.put("col2", col2);


        String expression = "col1 == 'C' && col2 == 'D'";

        Boolean result = (Boolean) MVEL.eval(expression,context);

        System.out.println(result);//true


        expression = "col1 == 'E' && col2 == 'D'";

        result = (Boolean) MVEL.eval(expression,context);

        System.out.println(result);//false

    }

}

如果您还有任何疑问,请随时告诉我。


更新:以下更新是解释为什么您需要上下文对象(您在评论中提到您不想将变量添加到上下文对象)。


如果您查看https://github.com/mvel/mvel/blob/master/src/main/java/org/mvel2/MVEL.java上的文档,您会很想使用以下方法:


public static Object eval(String expression) {

    return new MVELInterpretedRuntime(expression, new ImmutableDefaultFactory()).parse();

}

但是,下面的代码将无法编译:


String col1 = "C";

String col2 = "D";

String expression = "col1 == 'C' && col2 == 'D'";

System.out.println(new MVELInterpretedRuntime(expression, new ImmutableDefaultFactory()).parse());

原因是,以下构造函数的可见性不是public。


MVELInterpretedRuntime(String expression, VariableResolverFactory resolverFactory) {

    setExpression(expression);

    this.variableFactory = resolverFactory;

}

因此,您需要在客户端程序中填充一个上下文对象,并将该对象与表达式一起传递给评估 MVEL 表达式的程序/方法。在我的程序中,这是main我填充上下文对象以及评估 MVEL 表达式的方法。


查看完整回答
反对 回复 2024-01-05
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信