hi there,

I've noted an issue with the validator-rules.xml:

Right now Javascript validation is done sequentially for each datatype.
e.g. formValidationResult =  formValidationResult = validateRequired(form) 
&& validateByte(form) && validateShort(form) ...;
This means first all required fields have to be entered, and then the 
field datatype validations will start and so on.
>From a user-point-of-view this is not immediately obvious. A user would 
say that it's preferable to have each field validated as soon as it is 
possible.
Additionally, the user will face many javascript-alerts until he is able 
to submit the form (as byte validations come first and then will come 
integer validations etc.)
You can easily try this out using the 
/struts-examples/validator/editJsType.do and enter invalid data into the 
short, the integer and the float field. You'll get one alert as you fix 
each field.

However, the solution to this is really easy:
Add two parameters to each validate<datatype>() function: 
e.g. validateRequired(form, errorFieldNames, errorFieldMessages) and set 
these parameters inside of each validation function:
// old implementation: fields[i++] = oRange[x][1];
// new dynamic implementation: 
errorFieldNames[errorFieldNames.length] = field.name;
errorFieldMessages[errorFieldMessages.length] =  oRange[x][1];

then, set up the following code to do the validation in your form:

function validateMyFormExtended(form) {
    var errorFieldNames = new Array();
    var errorFieldMessages = new Array();

    if (!bCancel) {
         // each validation routine will add error messages as they occur.
           validateRequired(form, errorFieldNames, errorFieldMessages);
           validateInteger(form, errorFieldNames, errorFieldMessages);
        //... do validation for each datatype

           // this will do ONE alert for all validation errors that have 
occured. 
           if (errorFieldNames.length>0) {
             alert(errorFieldMessages.join('\n'));
           }
   }
}

I've already patched struts-1.1 this way and can send the full javascript 
code to anyone interested.
In the latest nightly build validator-rules.xml has been split to use 
commons-validator-1.1.3.jar, but the javascript files there have stayed 
the same.

Best regards,
J. Fiala

Reply via email to