MVEL 표현식 내에서 사용하려는 Java 코드에 미리 정의 된 변수가 있습니다. 컨텍스트를 전달하고 싶지 않습니다.
String Col1 = "C";
String Col2 = "D";
String expression = "Col1 == 'C' && Col2 == 'D'";
Boolean result = (Boolean) MVEL.eval(expression);
변수 값을 읽고 표현식을 참 또는 거짓으로 평가하려면 어떻게해야합니까?
변수 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 표현식을 평가하는 방법입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다