`

MVEL2.0控制流

阅读更多
MVEL 2.0 Control Flow

MVEL's power goes beyond simple expressions. In fact, MVEL supports an assortment of control flow operators which will allow you to perform advanced scripting operations.

If-Then-Else

MVEL supports full, C/Java-style if-then-else blocks. For example:

if (var > 0) {
   System.out.println("Greater than zero!");
}
else if (var == -1) { 
   System.out.println("Minus one!");
}
else { 
   System.out.println("Something else!");
}

Ternary statements

Ternary statements are supported just as in Java:

var > 0 ? "Yes" : "No";

And nested ternary statements:

var > 0 ? "Yes" : (var == -1 ? "Minus One!" : "No")

Foreach

One of the most powerful features in MVEL is it's foreach operator. It is similar to the for each operator in Java 1.5 in both syntax and functionality. It accepts two parameters separated by a colon, the first is the local variable for the current element, and the second is the collection or array to be iterated.

For example:

count = 0;
foreach (name : people) {
   count++;
   System.out.println("Person #" + count + ":" + name);
}
    
System.out.println("Total people: " + count);

Since MVEL treats Strings as iterable objects you can iterate a String (character by character) with a foreach block:

str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

foreach (el : str) {
   System.out.print("[" + el + "]"); 
}

The above example outputs: [A][B][C][D][E][F][G][H][I][J][K][L][M][N][O][P][Q][R][S][T][U][V][W][X][Y][Z]

You can also use MVEL to count up to an integer value (from 1):

foreach (x : 9) { 
   System.out.print(x);
}

Which outputs: 123456789

Syntax Note: As of MVEL 2.0, it is now possible to simply abbreviate foreach in the same way it is in Java 5.0, by using the for keyword. For example:

for (item : collection) { ... }

For Loop

MVEL 2.0 implements standard C for-loops:

for (int i =0; i < 100; i++) { 
   System.out.println(i);
}

Do While, Do Until

do while and do until are implemented in MVEL, following the same convention as Java, with until being the inverse of while.

do { 
   x = something();
} 
while (x != null);

... is semantically equivalent to ...

do {
   x = something();
}
until (x == null);

While, Until

MVEL 2.0 implements standard while, with the addition of the inverse until.

while (isTrue()) {
   doSomething();
}

... or ...

until (isFalse()) {
   doSomething();
}
分享到:
评论
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],求指导

相关推荐

    Activiti BPMN2.0设计器eclipse插件

    Activiti是一款开源的工作流引擎,它实现了业务流程管理(Business Process Management, BPM)标准BPMN 2.0。BPMN 2.0是一种图形化的语言,用于定义和建模复杂的业务流程,使得非技术人员也能理解流程逻辑。Eclipse...

    activiti实战及示例源码

    1. **Activiti简介**:Activiti是一个开源的工作流和业务自动化引擎,基于Java开发,支持BPMN 2.0标准,广泛应用于企业流程管理。它的设计目标是轻量级、易于使用和高度可扩展。 2. **BPMN 2.0标准**:Business ...

    Activiti实战完整扫描高清版.zip

    Activiti是一个开源的工作流和业务规则引擎,基于模型驱动的开发方式(Model Driven Development, MDD),支持BPMN 2.0标准,使得业务流程的建模和执行变得更加直观和灵活。该引擎广泛应用于企业级应用中,如订单...

    jbpm4.3 - demo

    9. **安全控制**:jbpm4.3允许设置权限控制,确保只有授权的用户才能执行特定的流程或任务。 通过【jbpm4.3-demo】项目,学习者可以实践上述知识点,了解如何部署流程定义,启动流程实例,以及如何在Java代码或Web...

    activiti7开发指南

    4. **流程实例管理**:讨论如何启动和控制流程实例,包括开始、暂停、恢复、结束流程实例的操作,以及对并发和多实例的支持。 5. **任务管理**:介绍任务的概念,如何分配、领取、完成任务,以及任务监听器的使用,...

    activiti-app6.0中文版.zip

    1. **Activiti 工作流引擎**:Activiti 是基于BPMN 2.0标准的,这意味着它能够支持各种复杂的业务流程,包括并行分支、循环、事件触发等。它还支持自定义工作流行为,可以通过编写JavaDelegate或者使用表达式语言...

    JBoss+jBPM+jPDL用户开发手册_3.2.3

    jPDL允许定义如决策分支、并行任务、循环等流程元素,并可以与Java代码或MVEL表达式结合,实现动态流程控制。 在《JBoss+jBPM+jPDL用户开发手册_3.2.3》中,你将学习到以下关键知识点: 1. **环境配置**:如何设置...

    activiti5用户手册

    Activiti是一款轻量级、高性能的工作流引擎,它基于BPMN 2.0标准,提供了丰富的API和图形化建模工具,支持复杂的业务流程建模。它的设计理念是易于使用,同时又具有企业级的稳定性和可扩展性。通过Activiti,开发者...

    jbpm的扩展源代码

    首先,jbpm提供了流程建模工具,支持BPMN 2.0标准,使得业务流程可以以图形化的方式进行设计和理解。流程定义文件通常以`.bpmn2`或`.bpmn`结尾,其中包含了流程图的各个元素,如开始事件、结束事件、任务、网关等。 ...

    activiyi5.21用户手册, 不要积分

    可能包括与BPMN 2.0规范的兼容性,以及它如何简化业务流程建模和执行。 2. **安装与配置**:详述如何在各种环境中设置和配置Activiti,包括数据库连接、依赖库的添加、服务启动和停止等步骤。 3. **模型设计**:...

    activiti 第3天 共4天 视频教程

    9. **流程变量和表达式**:讲述如何在流程中使用变量进行数据交换,以及使用MVEL或EL表达式进行条件判断和逻辑控制。 10. **流程审计与历史记录**:讲解Activiti的审计功能,如何查看历史流程实例、历史任务和其他...

    Drools4.0官方使用手册中文

    - 引入规则流,支持规则的流程控制。 - 支持有状态和无状态的Working Memory(规则引擎Session),满足不同场景需求。 - 异步Working Memory操作,提高并发性能。 - 规则代理(Agent)提供热部署机制,便于BRMS...

    规则引擎Drools使用手册(中文)

    - **Web2.0 Ajax界面**:采用了Web2.0 Ajax技术,提升了用户体验。 - **Package配置支持**:方便配置规则包。 - **规则修改简化**:通过向导编辑器与文本编辑器简化规则修改流程。 - **Package编译与部署**:支持...

    Drools4.0官方使用手册(中文).pdf

    Drools4.0还支持插件式语言和对MVEL脚本语言的全面支持,重构了DSL(Domain Specific Language)引擎,使得本地化更为容易。新增了Fact属性的自动转换功能,以适应返回值约束和内嵌求值。同时,加强了对XML规则的...

    Activiti5.2版

    Activiti 是一个开源的工作流程(Workflow)和业务自动化(BPM)引擎,它基于Java平台,设计用于在企业级应用中实现工作流管理和业务流程自动化。这个标题提到的"Activiti5.2版"指的是该引擎的一个较早版本,发布于 ...

    Drools4.0 官方使用手册中文.doc

    - **插件式语言支持**:支持 MVEL 脚本语言,并允许扩展其他脚本语言。 - **DSL 引擎重写**:实现了完全的本地化,增强了定制化规则编写的能力。 - **自动变换**:Fact 属性自动处理返回值约束和内嵌求值。 2. *...

Global site tag (gtag.js) - Google Analytics