You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Activiti执行报错:javax.el.PropertyNotFoundException问题求助

Activiti流程变量无法识别问题排查与解决

问题原因

  • 变量存储范围错误:User Task中把属性存在了任务局部变量(Task Local Variables),而非流程实例变量(Process Instance Variables),Exclusive Gateway只能读取流程实例级别的变量。
  • 变量名不匹配:Condition里配置的变量名和实际存入的变量名存在大小写、拼写差异,EL表达式对变量名大小写敏感。
  • Service Task变量丢失:Service Task处理过程中未将变量重新存入流程实例,或者处理逻辑覆盖/删除了该变量。
  • EL表达式语法错误:Condition中的表达式写法有误,比如变量名包裹错误、运算符使用不当,导致引擎无法解析。

解决步骤

1. 确保变量存入流程实例级别

在User Task的业务逻辑中,使用流程实例的变量存储方法,而非任务局部变量:

// 正确设置流程实例变量,网关可直接访问
execution.setVariable("approvalStatus", "pass");

避免使用task.setVariableLocal(),该方法仅将变量绑定到当前User Task,后续节点无法读取。

2. 严格核对变量名称

检查Exclusive Gateway的Condition规则,确保变量名和代码中设置的完全一致。比如代码里存的是approvalStatus,Condition里就不能写成ApprovalStatus或approval_status。

3. 检查Service Task的变量处理

如果Service Task需要对该变量做处理,处理完成后务必重新存入流程实例:

// 在Service Task的JavaDelegate实现中处理变量
public class MyServiceTask implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        String status = (String) execution.getVariable("approvalStatus");
        // 业务处理逻辑
        String newStatus = status.equals("pass") ? "processed" : "rejected";
        // 重新存入流程实例
        execution.setVariable("approvalStatus", newStatus);
    }
}

4. 修正EL表达式写法

Condition中的EL表达式要符合规范,示例正确写法:

${approvalStatus == 'pass'}

避免多余的引号、错误的比较运算符(比如用=代替==)。

5. 调试验证变量存在性

可以通过API或Activiti管理工具查看流程实例的变量情况,确认变量是否存在:

// 用RuntimeService获取流程实例变量
Map<String, Object> vars = runtimeService.getVariables(processInstanceId);
System.out.println("当前流程变量:" + vars);

也可以在Activiti Modeler的流程实例详情中查看变量列表,确认变量是否正确存储。

内容的提问来源于stack exchange,提问作者Atul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:21:00