jexl表达式应用
package com.exp;import junit.framework.TestCase;import mons.jexl2.Expression;import mons.jexl2.JexlContext;import mons.jexl2.JexlEngine;import mons.jexl2.MapContext;public class Test extends TestCase {/*** * @desc <pre>* 需求描述:数据库中有如下表:test,列定义如下:* --------* c1 c2 c3* --------* 1 2 3* 2 1 0* ...* --------* 业务需要在用户录入数据后,进行数据校验,对不符合条件的数据,禁止保存;* * 条件1:如c1>c2,则c3=0;否则c3值不变;* 此问题可以使用客户端或服务器端简单实现,但是对于这样的表达式有几千个,* 并且需求经常发生变更时,代码维护量将成指数级增加,需要考虑优化算法。* * 解决办法:* 使用jexl表达式,将各条件保存为表达式,数据保存时,校验即可。* commons-jexl-2.1.1.jar*/public static void testExpr() {Expression expr;JexlContext ctxt = new MapContext();JexlEngine jexl = new JexlEngine();// 表达式String exps = "if(c1>c2) {c3=0}";expr = jexl.createExpression(exps);// case 1ctxt.set("c1", 1);ctxt.set("c2", 2);expr.evaluate(ctxt);assertFalse((Integer) ctxt.get("c3") == (Integer) (0));// case 2ctxt.set("c1", 2);ctxt.set("c2", 1);expr.evaluate(ctxt);assertTrue((Integer) ctxt.get("c3") == (Integer) (0));}}
如果觉得《jexl表达式应用》对你有帮助,请点赞、收藏,并留下你的观点哦!