我是MVEL的新手。按照以下步骤进行操作
1)从http://mvel.codehaus.org/Downloading+MVEL下载最新内容 即下载mvel2-2.2.0.jar(需要JDK 1.5+)
2)创建了一个简单的自定义obj列表
class TestMVEL {
public static void main(String[] p){
String expr0 = "fruits[1]";
String expr1 = "System.out.println(fruits[1]);";
String expr2 = "foreach( f : fruits) { System.out.println(f.getName()); }";
System.out.println(MVEL.eval(expr0, new Basket()));//prints Fruit{name=Banana}
MVEL.eval(expr1, new Basket());// prints Fruit{name=Banana}
MVEL.eval(expr2, new Basket());//error
}
}
class Basket {
List<Fruit> fruits = new ArrayList<Fruit>();
public List<Fruit> getFruits(){
fruits.clear();
fruits.add(new Fruit("Apple"));
fruits.add(new Fruit("Banana"));
fruits.add(new Fruit("Orange"));
return fruits;
}
}
class Fruit {
private String name;
public Fruit(String n){
name = n;
}
public String getName(){
return name;
}
public String toString() {
return "Fruit{" + "name=" + name + '}';
}
}
3)获得以下错误
线程“main”中的异常[错误:f.getName():Class org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer 无法访问类test.Fruit的成员与修饰符“public”] [附近: {... foreach(f:fruits){System.out.println(f.getName()); } ....}]
请帮助!!!
另外,我们在Groovy或SpringEL中有相似的功能吗?其中哪一个作为Java EL更可靠?
答案 0 :(得分:0)
不知道你为什么会收到这个错误,
我正在使用下面的Mvel版本
<mvel.version>2.2.0.Final</mvel.version>
<强>输出强>
Fruit{name=Banana}
Fruit{name=Banana}
Apple
Banana
Orange
答案 1 :(得分:0)
水果类需要公开。
public class Fruit...