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

Alfresco出现Invalid property value报错的排查与解决方法

问题现象
  • 通过Alfresco Model Manager新增2个List of Values类型字段adadoc:regions、adadoc:countries
  • 应用启动后编辑携带这两个字段的文件时,触发Invalid property value报错
  • 手动为字段填入合法有效值后保存不会触发报错,过往同类型新增字段操作无异常
  • 报错参考截图:
    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会直接跳过枚举值校验,不会触发报错。
修复步骤
  1. 校验字段基础配置
    进入Model Manager找到这两个字段,确认「允许空值」选项已勾选,保存模型后重新部署生效。
  2. 修复自定义控件的取值逻辑
    分别打开两个自定义控件文件select-many-regions.ftl、select-many-countries.ftl,修改表单提交时的取值逻辑:当选中值为空时,返回null而非空串/空数组,参考逻辑如下:
    // 控件提交取值逻辑
    function getSubmitValue() {
        const selectedValues = $(controlEl).val();
        return Array.isArray(selectedValues) && selectedValues.length ? selectedValues : null;
    }
    
  3. 修复存量异常数据
    如果已经有存量文档的这两个字段被写入了空串值,登录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();
    });
    
  4. 缓存清理验证
    清除Tomcat临时目录、Share端静态资源缓存,重启服务后,测试无选值状态下编辑保存文档,确认报错消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:24:33