2014-10-13 4 views
0

Мне нужно оценить выражение в дате MVEL, содержащей дату. В принципе, Мне нужно добавить определенное количество дней до заданной даты и получить значение. Когда я пытаюсь оценить выражение в MVEL, получаю некоторые исключения.Оценка выражения с помощью MVEL

Вот мой код ::

package Mvel; 

import java.io.Serializable; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.Map; 

import org.mvel2.MVEL; 
import org.mvel2.integration.VariableResolverFactory; 
import org.mvel2.integration.impl.MapVariableResolverFactory; 

public class Mveldatetest { 

    public static void main(String[] args) throws ParseException { 
     // TODO Auto-generated method stub 
     Map<String, Object> m1 = new HashMap<String, Object>(); 
     m1.put("name", "xyz"); 
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
     Date d1 = sdf.parse("02/10/2014"); 
     m1.put("doj", d1); 
     //Date d2=sdf.parse("05/10/2014"); 
     System.out.println("Given Date"+" "+d1); 

     final Calendar c = Calendar.getInstance(); 
     c.setTime(d1); 
     System.out.println(c.getTime()); 
     Date finaldate=(Date) MVEL.eval("c.add(Calendar.DAY_OF_MONTH, 4)",m1); 

     System.out.println(finaldate); 


    } 
} 

Я получаю следующее исключение ::

Exception in thread "main" [Error: unresolvable property or identifier: c] 
[Near : {... c.add(Calendar.DAY_OF_MONTH, 4 ....}] 
      ^
[Line: 1, Column: 1] 
    at org.mvel2.PropertyAccessor.getBeanProperty(PropertyAccessor.java:677) 
    at org.mvel2.PropertyAccessor.getNormal(PropertyAccessor.java:179) 
    at org.mvel2.PropertyAccessor.get(PropertyAccessor.java:146) 
    at org.mvel2.PropertyAccessor.get(PropertyAccessor.java:126) 
    at org.mvel2.ast.ASTNode.getReducedValue(ASTNode.java:187) 
    at org.mvel2.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:106) 
    at org.mvel2.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:49) 
    at org.mvel2.MVEL.eval(MVEL.java:165) 
    at Mvel.Mveldatetest.main(Mveldatetest.java:31) 

ответ

1

Вы должны добавить c к контексту m1. Кроме того, Calender также неизвестно, но вместо этого вы можете просто использовать c (уродливый, но работает). Наконец, обратите внимание, что add возвращает void, т. Е. Изменяет c на месте. Попробуйте это:

System.out.println(c.getTime()); 
m1.put("c", c); 
MVEL.eval("c.add(c.DAY_OF_MONTH, 4)", m1); 
System.out.println(c.getTime()); 

Выход:

Thu Oct 02 00:00:00 CEST 2014 
Mon Oct 06 00:00:00 CEST 2014 
+0

ли это работает? –

+0

Ну, я вам доверяю. Причина моего встречного вопроса заключалась в документации MVEL, в которой говорится, что вам нужно указать FQCN в случае классов Java, используемых в выражениях MVEL! –

Смежные вопросы