`
nanjingjiangbiao_T
  • 浏览: 2739767 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

表达式解释引擎 JSEL

 
阅读更多

JSEL是一个基于逆波兰式结构,采用JS运算规则的简单的表达式解释引擎。 同时它还是一个JSON解析引擎。

基本特征

  • 基于逆波兰式这个简单的计算模型,最大的特点就是简单。
  • 支持短路优化(运算过程中,会根据需要,跳过无需计算的节点(boolean运算和三元运算有此类需求)。
  • 运算规则基于前端开发人员熟悉的JavaScript,可以用于模板引擎的表达式实现。
  • 他同时还是JSON解释引擎的超集,可以用于解释JSON数据源。
  • 简单的运算接口,可以简单的重新定义运算规则。
  • 由于引擎本身实现的简单,程序体积非常小(JAR文件只有22k,同类工具OGNL 168k);适合于嵌入其他对文件大小要求苛刻环境,如需要下载的webstart小程序。

基本用法

import org.xidea.el.Expression;
import org.xidea.el.ExpressionImpl;
import java.util.HashMap;
public class Test{
  public static void main(String[] args){
    Expression el = new ExpressionImpl("var1 +2 * var2");
    //Expression el = new ExpressionImpl("var1 +2 * var2",new CalculaterImpl());//你也可以定义你自己的运算规则
    HashMap context = new HashMap();
    context.put("var1",111);
    context.put("var2",222);
    Object result1 = el.evaluate(context);//555
    context.put("var2",333);
    Object result2 = el.evaluate(context);//777
    System.out.println("result1:");
    System.out.println(result1);
    System.out.println("result2:");
    System.out.println(result2);
  }
}
分享到:
评论

相关推荐

    js中如何引用EL表达式.txt

    在这个例子中,`${msgs.addFullName}`是一个EL表达式,它会被JSP引擎解析并计算出一个值,然后通过`<%= %>`插入到JS代码中,成为`var addFullName`变量的值。 #### 方法二:使用数据属性 另一种方法是利用HTML5的...

    java开源包1

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包11

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包2

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包3

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包6

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包5

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包10

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包4

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包8

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包7

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包9

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    java开源包101

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    Java资源包01

    注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 ...

    工作流程图-规则引擎图(javascript)

    4. **可扩展性**:JavaScript库如D3.js提供了丰富的功能,可以轻松地扩展工作流程图和规则引擎图的功能,如动画效果、实时更新等。 总的来说,工作流程图和规则引擎图是业务逻辑和流程管理的重要工具。利用...

    jsp页面中EL表达式被当成字符串处理不显示值问题的解决方法

    `isELIgnored="true"`意味着JSP引擎会忽略EL表达式,将其视为普通字符串处理,而`isELIgnored="false"`则启用EL表达式解析。 在JavaEE4中,默认情况下`isELIgnored`是设为`false`的,这意味着EL表达式会被解析。但...

    Java表达式攻防下的黑魔法-release

    Java表达式攻防中的黑魔法(Black Magic)主要集中在Java表达式语言(EL)、Spring表达式语言(SpEL)以及对象图导航语言(OGNL)等领域。 #### 关键概念解析 1. **Java表达式语言(EL)**: - **定义**:EL是一...

    正则表达式系统教程中文版.zip

    4. **正则表达式引擎** - **DFA(确定有限状态自动机)**:快速但可能无法找到所有匹配,通常用于简单的模式。 - **NFA(非确定有限状态自动机)**:更灵活,能匹配复杂模式,但可能较慢。 5. **实践案例** - **...

    基于规则引擎liteflow, 使用前端架构LogicFlow 开发的前端配置页面 通过页面配置生成json,交给后端生成EL

    将JSON数据提交给后端后,后端可以解析这些数据,并利用Liteflow规则引擎生成相应的EL(Expression Language)表达式。 EL表达式是一种简化版的脚本语言,常用于Web应用中,用来动态计算和访问JavaBeans属性。在...

Global site tag (gtag.js) - Google Analytics