You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Nacho G. Mac Dowell" <ig...@informa.es> on 2004/09/06 13:25:48 UTC
Bug#: 30872 (It is assigned to struts-dev)
NOTE: I have seen this issue has been solved in cvs head (for required
validation). I am posting this anyway as I think it is a more general
solution
(it grabs all values for an element so you don't have to care what type of
element it is, just its values). Please read on.
http://issues.apache.org/bugzilla/show_bug.cgi?id=30872
The problem with this is the way html handles different input types.
Some input
types (text, textarea, hidden, password, select-one and file) can only
return
single values. Checkboxes, radio buttons (surprising enough) and select-
multiple return multiple values. When performing required validation
(this also
happens with other validations, some of them even check less types) it
is not
validating checkboxes and select-multiple and it isn't correctly
handling radio
buttons. I propose a different way of doing things:
1. First fill the object we use for validation with all the values is
currently
holding. Textarea, text... will have a single element array and checkbox
and
select-multiple may have multiple values.
2. Loop through the validatable elements and then through all their
values to
perform the actual validation.
We could have textareas, text... to set only a value (not an array), but
IMO
this may lead to confusion and possible inconsistencies.
I beleive that all validations should check all the possible scenarios.
I don't
see why select-one elements should not be checked for maxlength or
minlength.
They are all form-elements regardless of how they are displayed and they
will
eventually pass as request parameters.
I am sending a patch with a new javascript function that sets all values on
their respective elements.
validateRequired and validateMinLength is using this new approach as
well (so
you can se it work).
It is quite difficult to provide tests for this. Solex could probably do
the
job for this. It records http activity (as a tunnel) and then can be
used as
tests. I haven't used it but it sounds good to me. Anyway, this has been
tested
on IE6 and Mozilla 1.72
Should the javascript functions try to guess correct validation
definition (for
example: is the field "textField" present before checking if its value
is not
empty?)
The new function would be:
function fillValidateValues(form, oObject) {
//we'll set a fourth element in the array containing an array of values
for (fillx in oObject) {
//variable must be set to something different than x or it gets
confused with caller's x var
var fillfield = form[oObject[fillx][0]];
var values = new Array();
var count = 0;
if (fillfield.type) {
if (fillfield.type == 'text' ||
fillfield.type == 'textarea' ||
fillfield.type == 'hidden' ||
fillfield.type == 'file' ||
fillfield.type == 'select-one' ||
fillfield.type == 'select-multiple' ||
fillfield.type == 'password') {
// get field's value
if (fillfield.type == "select-one") {
var si = fillfield.selectedIndex;
//we shouldn't check if si >=0 since select-ones will
always be there when submitting
values[count++] = fillfield.options[si].value;
} else if (fillfield.type == "select-multiple") {
//we get all the selected values of this select-multiple
//looping through its options array
for (i=0; i<fillfield.options.length; i++) {
if (fillfield.options[i].selected) {
values[count++] = fillfield.options[i].value;
}
}
} else {
values[count++] = fillfield.value;
}
} else if (fillfield.checked) {
//it's a single checkbox or single radio
values[count++] = fillfield.value;
}
} else {//it's a nodeList (radio group or checkbox group)
for (i=0; i<fillfield.length; i++) {
if (fillfield[i].checked) {
values[count++] = fillfield[i].value;
}
}
}
oObject[fillx][3] = values;
}
return oObject;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org