Mvel, как установить значение

Мне нужно установить значение атрибута, если выражение MVel истинно. Может ли кто-нибудь мне помочь, как это сделать.

Пример кода, как показано ниже:

LineItem lineItem = new LineItem();

 Address address = new Address();
 address.setAddress1("ABC");
 address.setAddress2("PA");

 lineItem.setShipFromAddress(address);

 ParserContext parserContext = ParserContext.create();
 parserContext.stronglyTyped().withInput("lineItem",LineItem.class)
 .withInput("shipFromAddress", Address.class);

 Object compiledWithSet = MVEL.compileExpression("( shipFromAddress.address1 contains 'ABC' || shipFromAddress.address1 contains 'ABC DEF' ) && (shipFromAddress.address2 contains 'PA') ? setShipFromLocation('PA1') : ",parserContext);
 MVEL.executeExpression(compiledWithSet, lineItem);
1 ответ

Существует решение вашей проблемы, но вы можете подробнее рассказать о своем случае использования. Вот небольшой пример ответа, надеюсь, что это поможет вам начать работу.

public class MyMaths {

 int a;

 public int getA() {
 return a;
 }

 public void setA(int a) {
 this.a = a;
 }
}

public static void main(String[] args) {

 Map map = new HashMap();
 MyMaths mayMaths = new MyMaths();
 map.put("obj", mayMaths);
 map.put("name", "Ankur");

 String expression1 = "obj.a = ( name == 'Ankur') ? 20 : 25";

 Serializable compiled1 = MVEL.compileExpression(expression1);

 MVEL.executeExpression(compiled1, map);

 System.out.println(mayMaths.getA());

 }

Поэтому здесь я фактически присваиваю значение переменной " a " класса MyMaths

Выход - 20

Теперь измените значение с "Ankur" на "XYZ", выход будет равен 25.

licensed under cc by-sa 3.0 with attribution.