click-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bob Schellink <sab...@gmail.com>
Subject Improved Field validation
Date Fri, 15 Oct 2010 11:35:27 GMT
 The explicit binding feature in 2.2.0 is quite useful in building highly scalable dynamic
pages,
however our validation story isn't as complete as I'd like it to be. Today I've helped a colleague
building a fairly sophisticated dynamic form, and one issue we ran into was that Click Fields
bind
and validate their values *even* for dynamically added fields which did not partake in the
current
post request. In other words the newly added fields does not have a request parameter. We
ended up
conditionally toggling form validation, but the default value we assigned in the onInit gets
overridden by the binding, forcing us to set default value in the onRender. This process wasn't
smooth as I've hoped, so I looked at the Field source code for ways to improve the behavior,
and
think I've found a way.

Field#onProcess() looks like this:

        bindRequestValue();
        if (getValidate()) {
            validate();
        }
        dispatchActionEvent();


So whether the field has an incoming request parameter or not, its value is bound to it's
request
parameter. And validation will occur unless explicitly set to false. So the idea is to wrap
the
above code like this:


  if (getContext().hasParameter(getName()) {
    bindRequestValue();
    if (getValidate()) {
      validate();
    }
  dispatchActionEvent();
}

This nicely sidesteps the issue we ran into today. Only submitted fields will be validated,
and
Field's default values set in onInit is left as is.

Maybe there is a reason for the current behavior that I'm missing?

Bob

Mime
View raw message