Alfresco出现Invalid property value报错的排查与解决方法
问题现象
- 通过Alfresco Model Manager新增2个List of Values类型字段
adadoc:regions、adadoc:countries - 应用启动后编辑携带这两个字段的文件时,触发Invalid property value报错
- 手动为字段填入合法有效值后保存不会触发报错,过往同类型新增字段操作无异常
- 报错参考截图:

相关字段配置
<field id="adadoc:regions" set='regionsAndCountries'> <control template="/org/alfresco/components/form/controls/select-many-regions.ftl"> <control-param name="mode">and</control-param> <control-param name="style">width:325px</control-param> </control> </field> <field id="adadoc:countries" set='regionsAndCountries' > <control template="/org/alfresco/components/form/controls/select-many-countries.ftl"> <control-param name="mode">and</control-param> <control-param name="style">width:325px</control-param> </control> </field>
问题根因
该问题和数据库无关,核心原因是自定义多值选择控件的空值提交逻辑不兼容Alfresco受管模型的枚举值校验规则:
- 通过Model Manager创建的List of Values类型字段,后端会强制校验提交的属性值必须在预设的枚举值列表内
- 你使用的两个自定义ftl选择控件,没有做空值兼容处理:当字段未选择任何值时,表单提交会传递空字符串/长度为0的空数组,这两个值都不在字段预设的枚举值范围内,因此直接触发非法属性值报错
- 过往同类操作正常,是因为Alfresco默认的多值选择控件会在无选中值时自动提交
null,只要字段配置了允许空值,null会直接跳过枚举值校验,不会触发报错。
修复步骤
- 校验字段基础配置
进入Model Manager找到这两个字段,确认「允许空值」选项已勾选,保存模型后重新部署生效。 - 修复自定义控件的取值逻辑
分别打开两个自定义控件文件select-many-regions.ftl、select-many-countries.ftl,修改表单提交时的取值逻辑:当选中值为空时,返回null而非空串/空数组,参考逻辑如下:// 控件提交取值逻辑 function getSubmitValue() { const selectedValues = $(controlEl).val(); return Array.isArray(selectedValues) && selectedValues.length ? selectedValues : null; } - 修复存量异常数据
如果已经有存量文档的这两个字段被写入了空串值,登录Alfresco后台控制台执行修复脚本,将空串属性统一更新为null:// 后台执行的节点修复脚本 const errorNodes = search.query({ query: "ASPECT:\"adadoc:对应关联的方面ID\" AND (@adadoc\\:regions:\"\" OR @adadoc\\:countries:\"\")" }); errorNodes.forEach(node => { if (node.properties["adadoc:regions"] === "") { node.properties["adadoc:regions"] = null; } if (node.properties["adadoc:countries"] === "") { node.properties["adadoc:countries"] = null; } node.save(); }); - 缓存清理验证
清除Tomcat临时目录、Share端静态资源缓存,重启服务后,测试无选值状态下编辑保存文档,确认报错消失。
内容的提问来源于stack exchange,提问作者Mike1988B
相关产品推荐
相关产品推荐

