`

mvel的使用

 
阅读更多
    MVEL is a powerful expression language for Java-based applications,用来计算字符串形式的表达式。

    MVEL is very easy to use, and just as easy to integrate into your application. Let's take a quick look at a simple MVEL expression:

    foo.name == "Mr. Foo"

This simple expression asks MVEL if the value of foo.name is equal to "Mr. Foo". Simple enough, but what exactly is foo in this case? Well, it can be at least two things:
     A property of a Context Object; or  An External Variable
A context object is something you can use as the base of your expression by which MVEL will attempt to map identifiers to. Consider the following example:

public class Person {
    private String name;
    public void setName(String name) { this.name = name; }
    public String getName() { return this.name; }
}
Lets say we decide to make an instance of this particular class the context object for the expression, and we evaluate it like so:


Person personInst = new Person();
personInst.setName("Mr. Foo");
Object result = MVEL.eval("name == 'Mr. Foo'", personInst);


    When we execute this expression using the eval() method, we will get a result. In this particular case, the value of result will be a Boolean true. The reason for this, is that when the expression name == 'Mr. Foo' is evaluated, MVEL looks at the context object to see if it contain a property/field called name and extracts it.If we wanted to simply extract the value of name from the person instance, we could do that as well:

String result = (String) MVEL.eval("name", personInst);
assert "Mr. Foo".equals(result);


    Pretty simple stuff. But what if we want to inject a bunch of variables? MVEL supports that too, and there is both and easy way and a more advanced way (dealing with resolvers – which we won't get to here). The easy way simply involves passing in a Map of variables (names and values), like so:

Map vars = new HashMap();
vars.put("x", new Integer(5));
vars.put("y", new Integer(10));

Integer result = (Integer) MVEL.eval("x * y", vars);
assert result.intValue() == 50;  // Mind the JDK 1.4 compatible code

    Now, so far we've just been looking at using MVEL as a purely interpreted tool. MVEL can also compile expressions to execute them much faster using a different API. Let's convert the last expression into a compiled version:

// The compiled expression is serializable and can be cached for re-use.
CompiledExpression compiled = MVEL.compileExpression("x * y");

Map vars = new HashMap();
vars.put("x", new Integer(5));
vars.put("y", new Integer(10));

// Executes the compiled expression
Integer result = (Integer) MVEL.executeExpression(compiled, vars);
assert result.intValue() == 50;
分享到:
评论
2 楼 liujunhao225 2014-01-13  
[Error: could not access: List; in class: org.mvel2.ParserContext]

1楼,List只是个接口。你把List换成ArrayList试一下。
1 楼 superscorpio 2013-01-23  
public void testImportInContext() {
		ParserContext ctx = new ParserContext();
		ctx.addImport("List", List.class);
		ctx.addImport("ArrayList", ArrayList.class);

		MVEL.eval("List test = null;User u =null", ctx);
	}


以上代码报错,没看出问题所在,博主可否指点一下,错误如下:

[Error: could not access: List; in class: org.mvel2.ParserContext]

相关推荐

Global site tag (gtag.js) - Google Analytics