I just submitted a bug and submitted a patch as well for this problem.
Basically, the validator (javascript part) works fine for multiple
checkboxes and radio buttons, but doesn't for a single checkbox or a
single radio button. I modified the validateRequired method as below,
you'll need to replace this method in the validator-rules.xml file.
Works fine for me.

Saul


-------------------------------------------------
            function validateRequired(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRequired = new required();

                for (x in oRequired) {
                    var field = form[oRequired[x][0]];
                    
                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'file' ||
                        field.type == 'select-one' ||
                        field.type == 'radio' || // -- true for single
radio button, Saul Q Yuan ([EMAIL PROTECTED]) 10/28/03
                        field.type == 'checkbox' || // -- true for
single checkbox, Saul Q Yuan ([EMAIL PROTECTED]) 10/28/03
                        field.type == 'password') {
                        
                        var value = '';
                        // get field's value
                        if (field.type == "select-one") {
                            var si = field.selectedIndex;
                            if (si >= 0) {
                                value = field.options[si].value;
                            }
                                                // -- get value for
checked single radio button or checkbox, Saul Q Yuan
([EMAIL PROTECTED]) 10/28/03
                                                } else if (field.type ==
"radio" || field.type == "checkbox") {
                                                        if
(field.checked) {
                                                                value =
field.value;
                                                        }
                        } else {
                            value = field.value;
                        }
                        
                        if (trim(value).length == 0) {
                        
                            if (i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oRequired[x][1];
                            isValid = false;
                        }
                    } else if (field.type == "select-multiple") { 
                        var numOptions = field.options.length;
                        lastSelected=-1;
                        for(loop=numOptions-1;loop>=0;loop--) {
                            if(field.options[loop].selected) {
                                lastSelected = loop;
                                value = field.options[loop].value;
                                break;
                            }
                        }
                        if(lastSelected < 0 || trim(value).length == 0)
{
                            if(i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oRequired[x][1];
                            isValid=false;
                        }
                    } else if ((field.length > 0) && (field[0].type ==
'radio' || field[0].type == 'checkbox')) {
                        isChecked=-1;
                        for (loop=0;loop < field.length;loop++) {
                            if (field[loop].checked) {
                                isChecked=loop;
                                break; // only one needs to be checked
                            }
                        }
                        if (isChecked < 0) {
                            if (i == 0) {
                                focusField = field[0];
                            }
                            fields[i++] = oRequired[x][1];
                            isValid=false;
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return isValid;
            }

--------------------------------------------------------




-----Original Message-----
From: Jayaraman Dorai [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, October 29, 2003 12:49 PM
To: Struts Users Mailing List
Subject: RE: validator for check box

Does any one have any ideas or have written code to validate that at
least one item is selected on the  check box? Would be interested in the
javascript code for the same. On the server side, I can do that
validation on the action form, though doing it through struts validator
will be the ideal. Wondering why struts doesn't have it? Again, am I
missing something?

Thanks
Jayaraman 

> -----Original Message-----
> From: Jayaraman Dorai 
> Sent: Monday, October 27, 2003 2:31 PM
> To: [EMAIL PROTECTED]
> Subject: validator for check box
> 
> 
> Would like to validate that the user selects at least one 
> option in the check box which was created using 
> html-multibox. The struts-validator is not validating the 
> required for a check box.  Is there any code for validating 
> the check box or am I missing something?
>  
> Thanks
> Jayaraman
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to