如果日期为空,Xpages如何检查javascript?

时间:2014-05-09 21:51:20

标签: javascript xpages

这真的很奇怪。我在js库中进行验证。我检查字段是空白还是空,如果是,则抛出错误。

我有一个我想检查的日期字段。如果我没有输入默认值,代码工作正常。它说日期是空白的,然后当我输入一个值时它会让它通过。但是如果我输入@Now或@Today的默认值,如果用户碰巧删除了日期,则不会收到错误。我知道这不是必要的 - 我可以放一个必要的验证器,但它让我发疯,我无法弄明白。

    //This SSJS script library consolidates all the validation in one place
    //The postValidationError() function flags a control as invalid and provides an error message
    //so that the XPages ErrorMessage control is used to display the error on the page.

    var validateForm = function(){
        var valid = true;
        var control;
        var val;


        // ***  REPEAT THE FOLLOWING BLOCK OF CODE FOR EACH CONTROL FOR BASIC "REQUIRED" VALIDATION

        // For each field, change the Control Name in getComponent() and the error message text in postValidationError()
        //   Optionally, modify the IF conditions with more complex JavaScript for value ranges, regular expressions, data lookups, etc.


        //Validate Location
        control = getComponent("loc");
        val = control.getValue();
        if (isEmpty(val)) {
            valid = false;
            postValidationError(control,"Please enter a Loc");
        }


        //Validate Work Category
        control = getComponent("workCategory");
        val = control.getValue();
        if (isEmpty(val)) {
            valid = false;
            postValidationError(control,"Please enter a Work Category");
        }

        //Validate Work Sub Category
        control = getComponent("workSubCategory");
        val = control.getValue();
        if (isEmpty(val)) {
            valid = false;
            postValidationError(control,"Please enter a Sub Work Category");
        }


        //Validate Date


        control = getComponent("date");
        val = control.getValue();
        if (isEmpty(val)) {
            valid = false;
            postValidationError(control,"Please enter a date");
        }
        //Validate Time Spent
        control = getComponent("timeSpent");
        val = control.getValue();
        if (isEmpty(val)) {
            valid = false;
            postValidationError(control,"Please enter Time Spent");
        }

        // *** ----------------------------------------------------------------   *** 

        return valid;
    }

    function postValidationError(control, msg) {
        if ((typeof msg) != "string")
            return;
        var msgObj = new javax.faces.application.FacesMessage(javax.faces.application.FacesMessage.SEVERITY_ERROR, msg, msg);
        facesContext.addMessage(control.getClientId(facesContext), msgObj);
        control.setValid(false);
    }

    function isEmpty(o){


        return (o == null || o == "") ? true: false;

        //return (o == null || @Trim($A(o)[0]) == "" ) ? true : false;
    }

    function $A( object ){
        try {
            if( typeof object === 'undefined' || object === null ){ return []; }
            if( typeof object === 'string' ){ return [ object ]; }
            if( typeof object.toArray !== 'undefined' ){return object.toArray();}
            if( object.constructor === Array ){ return object; }  
            return [ object ];
        } catch( e ) {  }
    }

1 个答案:

答案 0 :(得分:2)

Bryan,XPage中用于验证的推荐方法是使用验证器,编写更少的代码,可以有选择地控制何时验证字段,可以将不同的检查彼此分开。

检查我的thoughts about validation。简而言之:

  • 代码验证(按钮,提交事件等)是验证完成的典型方式。作为一种普遍的方式并不能使它成为正确的。您需要推出自己的通知机制(如更新标签),并倾向于将验证绑定到UI。此外,当您删除字段时,验证例程可能会中断。最后一点:您很难记录验证的内容和原因。 (你看到我要去的地方)
  • 验证器与字段一起定义并打开一系列可能性。 XPages offers 9 different validators
  • 您可以编写JavaScript,正则表达式,检查数据类型或滚动您自己的数据类型。您可以在验证器中执行的按钮/事件代码中执行所有操作。由于验证器本身不与UI交互,因此设计人员可以决定如何在不更改验证代码的情况下显示消息。当您删除一个字段时,其所有验证代码都与它一起使用,因此维护变得更加容易。最后一点:您可以针对XPage源运行XSLT报告,并呈现一个显示包含所有已定义验证器的字段的报告,这使文档更容易。
  • 表单验证是您在经典Notes表单中定义的@Formulas。它们仅在您将“运行表单验证”指定为“保存时”或“两者”时触发。通常,您在升级现有应用程序时会使用它们。

Extracted from another blog entry