Alfresco共享表单:如何为非必填字段定义自定义验证处理程序?

时间:2013-12-20 19:43:56

标签: validation alfresco alfresco-share

我已经阅读过Alfresco文档以及wiki,但仍然不清楚:为Alfresco Share表单中的某个字段定义自定义验证处理程序的正确方法是什么?

问题是我在论坛中到处找到的方法总是覆盖MANDATORY类型,因此只有在字段设置为mandatory =“true”时才会调用验证处理程序。

<config evaluator="aspect" condition="my:aspect">
       <forms>
        <form>
            <field-visibility>
                <show id="my:property" />
            </field-visibility>
            <appearance>
                <field id="my:property" mandatory="true">
                    <constraint-handlers>
                        <constraint type="MANDATORY" validation-handler="Alfresco.forms.validation.myValidator" event="keyup" />
                    </constraint-handlers>
                </field>
            </appearance>
        </form>
    </forms>
</config>

但是如何为非强制性字段定义自定义验证处理程序?或者,这是选择/覆盖的正确类型?我尝试了type="LENGTH",但是当用户在表单字段和字段中输入内容时,也不会调用它。

更新

我也从下面的评论中尝试了Andreas的建议,但是,验证处理程序没有被调用。这是我的xml和函数:

<field id="my:field" mandatory="false">
    <constraint-handlers>
        <constraint message-id="mandatory.field.empty.suffix" event="keyup,propertychange" validation-handler="Alfresco.forms.validation.metahead"/>
    </constraint-handlers>                      
</field>

验证处理函数:

Alfresco.forms.validation.metahead = function FormEditMetadataWebWorkflowExt_metahead(field, args, event, form, silent, message)
   {
    console.log('metahead!');
    return false;
   }

以上验证函数不会随时调用,也不会在我更改字段的值或任何其他表单字段时调用。

接下来,当我在Alfresco论坛的某个地方阅读时,我尝试手动注册验证处理程序:

YAHOO.Bubbling.fire("registerValidationHandler",{fieldId: 'fieldIdOfMyField',handler: Alfresco.forms.validation.metahead, when: "onkeyup"});

但这只能部分起作用。它仅在任何其他(强制)表单字段更改时调用我的验证处理函数(这是正常的,因为当字段更改时整个表单验证发生),但时我更改我自己的字段(“我的:字段”)的值。

(而且,为什么验证处理程序需要手动注册;我认为这是xml中约束配置的用途。)

1 个答案:

答案 0 :(得分:0)

只需省略type属性,如下所示:

<constraint validation-handler="YourCompany.forms.validation.yourValidator" event="keyup" />

如果你的功能

YourCompany.forms.validation.yourValidator = function (field, args, event, form, silent, message)
{...}

返回false,显示的消息从消息资源(默认映射)解析为YourCompany.forms.validation.yourValidator.message的值。