我正在尝试为工作流表单上的某些自定义字段创建自定义验证处理程序。 A有两个字段:项目开始日期和项目结束日期。
对于这两个领域,我需要两种类型的验证:
然而,我仍然在创建自定义验证处理程序的开始。首先,我只尝试了一些简单的验证处理程序,用于仅包含数字的文本字段,但这不起作用。我做了以下事情:
在我的share-config-custom.xml中添加
<config>
<forms>
<dependencies>
<js src="/custom-form-validation.js" />
</dependencies>
</forms>
并连接到我的字段
<field id="mcwm:shortProjectNumber" set="general" mandatory="true">
<constraint-handlers>
<constraint type="MANDATORY" validation-handler="Alfresco.forms.validation.checkNumber" event="keyup" />
</constraint-handlers>
</field>
custom-form-validation.js文件是
Alfresco.forms.validation.checkNumber = function checkNumber(field, args, event, form, silent, message) {
var ok = (field.value=="") || field.value.match("^\\d{4}\\/\\d{4}$");
var valid = ok != null && ok;
if (!valid) {
YAHOO.util.Dom.setStyle(field.id, "border", "2px solid red");
}
else {
YAHOO.util.Dom.setStyle(field.id, "border", "");
}
// Inform the user if invalid
if (!valid && !silent && form)
{
var msg = "The number must match the pattern 1234/5678.";
form.addError(form.getFieldLabel(field.id) + " " + msg, field);
}
return valid;
};
我将custom-form-validation.js文件放在我的opt \ tomcat \ shared \ classes \ alfresco \ web-extension文件夹中,但是根本没有字段验证?有什么建议吗?
此致 Aleksadnar
答案 0 :(得分:2)
Share中的字段验证是作为客户端JavaScript实现的。因此,您的JavaScript文件位于Web应用程序的根目录中(最好是下面的目录结构),而不是WEB-INF。例如,您可能希望将其置于$ TOMCAT_HOME / webapps / share / extension / js下。您可能必须相应地调整依赖项引用。
接下来,不要将自定义代码放在Alfresco的命名空间中。创建自己的。您可以通过在JavaScript文件的开头放置类似的内容来创建自己的命名空间:
if (typeof SomeCo == "undefined" || !SomeCo)
{
var SomeCo = {};
}
您可能还想缩小JavaScript。然后,启用“共享调试”。您可以将以下内容放在share-config-custom.xml中(它位于$ TOMCAT_HOME / webapps / share / WEB-INF / classes / alfresco / web-extension下):
<alfresco-config>
<!-- Put Share Client in debug mode -->
<config replace="true">
<flags>
<client-debug>false</client-debug>
<client-debug-autologging>false</client-debug-autologging>
</flags>
</config>
</alfresco-config>
有了这些,您可以使用浏览器的开发者控制台逐步完成客户端JavaScript并找出验证器无法正常工作的原因。
答案 1 :(得分:0)
您可以使用另一种方法直接使用javascript来实现表单字段验证处理程序。我的意思是,你可以添加一个监听器来控制提交表单的时间,并添加一个条件来取消子表达。因此,您可以在加载表单时使用这样的代码:
//Add a listener to control when the form is submitted
document.body.addEventListener("submit", function (event) {
//If there are wrong values
if(wrongValues()){
//Cancel the event
event.stopPropagation();
event.preventDefault();
}
}, true);
如果您想了解有关此解决方案的更多详细信息,请访问此post