繁体   English   中英

使用MVEL评估表达式

[英]Evaluating an Expression using 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)

您必须将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM