在所有三种情况下,我都遇到了同样的错误。
unresolvable property or identifier: DAT
记住- 在评估表达式时"(OPVAL == 'OPERATION') && (DAT > '12345')"
,MVEL 使用AST tree
结构来解析任何给定的表达式,然后进行评估。
此外,如果(OPVAL == 'OPERATION')
为假,那么它将永远不会评估(DAT > '12345')
,因为&&
两者之间有一个运算符。
再仔细看一遍,玩转你的表情,或者移到(DAT > '12345')
前面,然后测试。
仅供参考,请参阅下面的代码
情况1
public static void main(String args[]) throws Exception {
String expression = "(OPVAL == 'OPERATION') && (DAT > '12345')";
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("OPVAL", "OPERATION1");
vars.put("DATA", "0");
System.out.println(MVEL.eval(expression, vars));
}
输出
false
由于(OPVAL == 'OPERATION')
评估为假。
案例2
public static void main(String args[]) throws Exception {
String expression = "(OPVAL == 'OPERATION') && (DAT > '12345')";
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("OPVAL", "OPERATION");
vars.put("DATA", "0");
System.out.println(MVEL.eval(expression, vars));
}
输出
Exception in thread "main" [Error: unresolvable property or identifier: DAT]
[Near : {... (OPVAL == 'OPERATION') && (DAT > '12345') ....}]
因为在这种情况下,(OPVAL == 'OPERATION')
评估为真,所以它进一步遍历评估(DAT > '12345')
。
希望它能解决你的困惑。