Camunda用户任务表单不显示问题排查求助
针对你遇到的用户任务外部表单不显示问题,从核心维度逐一排查:
1. 外部表单引用路径错误
Camunda引用resources目录下的外部表单时,路径需基于classpath根目录。比如表单放在resources/forms/route-selection.html,用户任务的表单引用必须写forms/route-selection.html,不能带/或classpath:前缀,否则引擎无法定位文件。
2. 表单控件与变量绑定不匹配
下拉框需正确绑定routes变量,确保表单代码符合Camunda规范:
<select cam-variable-name="selectedRoute" cam-variable-type="String" cam-options="routes"> <option value="">请选择路线</option> </select>
重点检查cam-options="routes"是否与Service Task中设置的变量名完全一致,同时确认变量是表单可解析的键值对结构。
3. 变量序列化方式不兼容
你用Variables.objectValue()将Map序列化为JSON格式的ObjectValue,但Camunda表单引擎默认期望直接使用原生Map类型变量,而非序列化后的包装对象。替换变量设置代码为:
@Override public void execute(DelegateExecution execution) throws Exception { Map<String, String> routes = new HashMap<>(); routes.put("001", "Route 1"); routes.put("002", "Route 2"); routes.put("003", "Route 3"); // 直接设置原生Map,无需序列化包装 execution.setVariable("routes", routes); }
序列化后的ObjectValue需要额外解析逻辑,普通表单控件无法直接识别,改用原生Map后表单才能正确读取下拉选项。
4. 表单文件未被正确打包
检查Spring Boot打包后的jar包,确认表单文件存在于BOOT-INF/classes/[你的表单路径]下。如果表单放在resources/static目录外,需确保Maven/Gradle的资源打包规则包含该文件,避免编译时被忽略。
5. Camunda表单引擎依赖缺失
如果使用Camunda 7.x,确保项目依赖中包含camunda-engine-spring-boot-starter-webapp,该依赖包含表单渲染所需的前端组件。仅引入核心引擎依赖会缺少表单渲染的必要资源。
内容的提问来源于stack exchange,提问作者Rahul Raj

