JUEL 包的结构如下:
1.1.1. Juel maven仓库配置
目前最新的版本是2.2.7,使用的时候在pom.xml中添加仓库坐标即可。
<dependency> <groupId>de.odysseus.juel</groupId> <artifactId>juel-spi</artifactId> <version>2.2.7</version> </dependency> <dependency> <groupId>de.odysseus.juel</groupId> <artifactId>juel-api</artifactId> <version>2.2.7</version> </dependency> <dependency> <groupId>de.odysseus.juel</groupId> <artifactId>juel-impl</artifactId> <version>2.2.7</version> </dependency>
juel-api-2.2.7.jar ——包含javax.el 包下的一些类
juel-impl-2.2.7.jar ——包含de.odysseus.el 实现类
juel-spi-2.2.7.jar ——包含META-INF/service/javax.el.ExpressionFactory 服务提供资源的定义(如果你的classpath里有多个EL的实现,而你又希望使用JUEL的实现,那么需要调用ExpressionFactory.newInstance() )
1.1.2. Juel hello word
//ExpressionFactory类的实现是de.odysseus.el.ExpressionFactoryImpl ExpressionFactory factory = new ExpressionFactoryImpl(); //de.odysseus.el.util provides包提供即时可用的子类ELContext //创建上下文对象context SimpleContext context = new SimpleContext(); //函数的前缀 函数的名称 ,执行的方法 三个参数的含义 context.setFunction("shareniu", "max", Math.class.getMethod("min", int.class, int.class)); //foo值为3 context.setVariable("foo", factory.createValueExpression(3, int.class)); //解析表达式 ValueExpression e = factory.createValueExpression(context, "${shareniu:max(foo,bar)}", int.class); //设置顶级的属性"bar"值为1 factory.createValueExpression(context, "${bar}", int.class).setValue(context, 2); // get value for our expression System.out.println(e.getValue(context)); // --> 2