String exp = "${variables:notEquals(varName, '123')}"; ExpressionFactory factory = new ExpressionFactoryImpl(); SimpleContext context = new SimpleContext(); context.setVariable("varName", factory.createValueExpression("123", Object.class)); context.setVariable("Flow_0kgaow2", factory.createValueExpression(snc, Object.class)); ValueExpression e = factory.createValueExpression(context, exp, Boolean.class); Object r = e.getValue(context);
时间: 2024-03-15 22:43:51 浏览: 87
Controlled Variables:Controld_vars.h始终使用有效变量-开源
根据你提供的代码片段,我猜测你是在使用Java中的EL表达式语言。如果是这样,那么你遇到的错误是因为在表达式中使用了一个名为'variables:notEquals'的函数,而该函数并没有被正确地定义和注册到系统中。
要解决这个问题,你需要确保在你的代码中正确地定义了'variables:notEquals'函数,并且将其注册到系统中。在你的表达式中,'variables'是一个命名空间,而'notEquals'是该命名空间下的一个函数。因此,你需要在代码中显式地定义这个命名空间,以及命名空间下的函数。
以下是一个可能的解决方案,你可以根据自己的需要进行修改:
```
package com.example;
import javax.el.*;
public class MyFunctions {
public static boolean notEquals(Object obj1, Object obj2) {
return !obj1.equals(obj2);
}
}
ExpressionFactory factory = new ExpressionFactoryImpl();
SimpleContext context = new SimpleContext();
// 定义命名空间
context.setFunction("variables", "notEquals", MyFunctions.class.getMethod("notEquals", Object.class, Object.class));
// 设置变量
context.setVariable("varName", factory.createValueExpression("123", Object.class));
context.setVariable("Flow_0kgaow2", factory.createValueExpression(snc, Object.class));
// 构造表达式并计算结果
String exp = "${variables:notEquals(varName, '123')}";
ValueExpression e = factory.createValueExpression(context, exp, Boolean.class);
Object r = e.getValue(context);
```
在上面的代码中,我们首先定义了一个名为'MyFunctions'的类,该类包含了我们需要使用的'notEquals'函数。然后,我们使用SimpleContext来构造一个EL表达式的上下文,并在上下文中定义了一个名为'variables'的命名空间,并将'notEquals'函数注册到该命名空间中。
最后,我们可以使用ExpressionFactory来构造表达式,并调用getValue方法来计算表达式的结果。在这个例子中,表达式的结果应该是false,因为我们将'varName'设置为了'123',而在表达式中判断'varName'是否等于'123'。
阅读全文