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:
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();
}
分享到:
相关推荐
Activiti是一款开源的工作流引擎,它实现了业务流程管理(Business Process Management, BPM)标准BPMN 2.0。BPMN 2.0是一种图形化的语言,用于定义和建模复杂的业务流程,使得非技术人员也能理解流程逻辑。Eclipse...
1. **Activiti简介**:Activiti是一个开源的工作流和业务自动化引擎,基于Java开发,支持BPMN 2.0标准,广泛应用于企业流程管理。它的设计目标是轻量级、易于使用和高度可扩展。 2. **BPMN 2.0标准**:Business ...
Activiti是一个开源的工作流和业务规则引擎,基于模型驱动的开发方式(Model Driven Development, MDD),支持BPMN 2.0标准,使得业务流程的建模和执行变得更加直观和灵活。该引擎广泛应用于企业级应用中,如订单...
9. **安全控制**:jbpm4.3允许设置权限控制,确保只有授权的用户才能执行特定的流程或任务。 通过【jbpm4.3-demo】项目,学习者可以实践上述知识点,了解如何部署流程定义,启动流程实例,以及如何在Java代码或Web...
4. **流程实例管理**:讨论如何启动和控制流程实例,包括开始、暂停、恢复、结束流程实例的操作,以及对并发和多实例的支持。 5. **任务管理**:介绍任务的概念,如何分配、领取、完成任务,以及任务监听器的使用,...
1. **Activiti 工作流引擎**:Activiti 是基于BPMN 2.0标准的,这意味着它能够支持各种复杂的业务流程,包括并行分支、循环、事件触发等。它还支持自定义工作流行为,可以通过编写JavaDelegate或者使用表达式语言...
jPDL允许定义如决策分支、并行任务、循环等流程元素,并可以与Java代码或MVEL表达式结合,实现动态流程控制。 在《JBoss+jBPM+jPDL用户开发手册_3.2.3》中,你将学习到以下关键知识点: 1. **环境配置**:如何设置...
Activiti是一款轻量级、高性能的工作流引擎,它基于BPMN 2.0标准,提供了丰富的API和图形化建模工具,支持复杂的业务流程建模。它的设计理念是易于使用,同时又具有企业级的稳定性和可扩展性。通过Activiti,开发者...
首先,jbpm提供了流程建模工具,支持BPMN 2.0标准,使得业务流程可以以图形化的方式进行设计和理解。流程定义文件通常以`.bpmn2`或`.bpmn`结尾,其中包含了流程图的各个元素,如开始事件、结束事件、任务、网关等。 ...
可能包括与BPMN 2.0规范的兼容性,以及它如何简化业务流程建模和执行。 2. **安装与配置**:详述如何在各种环境中设置和配置Activiti,包括数据库连接、依赖库的添加、服务启动和停止等步骤。 3. **模型设计**:...
9. **流程变量和表达式**:讲述如何在流程中使用变量进行数据交换,以及使用MVEL或EL表达式进行条件判断和逻辑控制。 10. **流程审计与历史记录**:讲解Activiti的审计功能,如何查看历史流程实例、历史任务和其他...
- 引入规则流,支持规则的流程控制。 - 支持有状态和无状态的Working Memory(规则引擎Session),满足不同场景需求。 - 异步Working Memory操作,提高并发性能。 - 规则代理(Agent)提供热部署机制,便于BRMS...
- **Web2.0 Ajax界面**:采用了Web2.0 Ajax技术,提升了用户体验。 - **Package配置支持**:方便配置规则包。 - **规则修改简化**:通过向导编辑器与文本编辑器简化规则修改流程。 - **Package编译与部署**:支持...
Drools4.0还支持插件式语言和对MVEL脚本语言的全面支持,重构了DSL(Domain Specific Language)引擎,使得本地化更为容易。新增了Fact属性的自动转换功能,以适应返回值约束和内嵌求值。同时,加强了对XML规则的...
Activiti 是一个开源的工作流程(Workflow)和业务自动化(BPM)引擎,它基于Java平台,设计用于在企业级应用中实现工作流管理和业务流程自动化。这个标题提到的"Activiti5.2版"指的是该引擎的一个较早版本,发布于 ...
- **插件式语言支持**:支持 MVEL 脚本语言,并允许扩展其他脚本语言。 - **DSL 引擎重写**:实现了完全的本地化,增强了定制化规则编写的能力。 - **自动变换**:Fact 属性自动处理返回值约束和内嵌求值。 2. *...