On 24/09/2008, at 1:00 AM, David Pollak wrote:

>
>
> On Tue, Sep 23, 2008 at 7:26 AM, Oliver Lambert <[EMAIL PROTECTED]>  
> wrote:
>
> On 23/09/2008, at 9:47 PM, David Pollak wrote:
>
>>
>>
>> On Tue, Sep 23, 2008 at 4:29 AM, Oliver Lambert <[EMAIL PROTECTED]>  
>> wrote:
>> I don't understand some of what I see with the validation logic.
>>
>>
>>> Right now, this is the way it works with the exception of the  
>>> client validation part.
>>>
>>> An example is MappedEmail (forget for a moment that it's mapped to  
>>> the DB):
>>>
>>> class MappedEmail[T<:Mapper[T]](owner: T, maxLen: Int) extends  
>>> MappedString[T](owner, maxLen) {
>>>
>>>   override def setFilter = notNull _ :: toLower _ :: trim _ ::  
>>> super.setFilter
>>
>> Is notNull a validation rather than filter?
>>
>> notNull is a filter.  The code looks more or less like:
>>
>> def notNull(in: String): String = if (in eq null) "" else in
>>
>>
>> These filters will take " [EMAIL PROTECTED]   " and turn it into "[EMAIL 
>> PROTECTED] 
>> "
>>
>>
>>>
>>>   override def validations = valRegex("^[a-z0-9._%-]+@(?:[a-z0-9-]+ 
>>> \\.)+[a-z]{2,4}$", ??("Invalid email address") _ ::
>>>                              super.validations
>> There are standard validations that apply to many fields (e.g  
>> notNull). Should these have a standard error message that is  
>> overridable with another on demand
>>
>> There are some standard validation functions in MappedString  
>> (notNull is a filter, not a validation).  I did not preload them  
>> with error messages because I think it's easy enough for a  
>> developer to specify the error message.  But you can write your own  
>> validation function collection that works the way you want to.
>>
>> Do/should validations stop at the first error message on the field,  
>> at least by default
>>
>> No.  All the problems with input should be flagged, except in some  
>> extraordinary circumstance.  If you want to do more complex  
>> validation logic, you can override validate which, by default, just  
>> interates through the existing validations.
>
> You have a message that the user is required to enter a field that  
> has been left null. Why bother doing any more validation on the  
> field. Why would you tell them its an invalid email address as well
>
> In the instant case, the single regular expression will cover *all*  
> of the validation cases.
>
> Please stop thinking of notNull as a validation function.  It is  
> not.  It is a filter that modifies the input to turn a 'null' into  
> an empty String.  It's applied to programmatic setting of the field  
> and it's unlikely to be triggered by using input from a form.

No, I cant stop thinking this way until Im hit over the head  
repeatedly. The user has hit the "Save", or whatever, and has left out  
a mandatory email field. Why tell them its an "Invalid email address"
when they never entered anything. That will confuse the poor buggers -  
they need to be told to enter the field.

>
>
> If you need complex logic for validation, that's possible with the  
> existing mechanism, you just have to put the complex logic into a  
> validation function rather than chaining validations together.  On a  
> broader note, it depends on how you present the site to users.  I  
> personally dislike sites that do something like "you didn't enter a  
> long enough name"... okay I fix that and then I get "there are  
> illegal characters in your name."  I'd rather get both messages so I  
> can fix both problems at once.

Yup, I agree with you on that, but I have a counter. The user has  
entered a password and confirmed the password. You tell them that the  
password is not long enough. You also tell them - "oh yeah, by the  
way, the passwords don't match". Even without the "oh yeah..." they  
might think your trying to be a bit too smart. They are going to have  
to change the passwords anyway, so maybe next time they will match.
>>>
>>> }
>>>
>>> setFilter: List[String => String]
>>> validations: List[String => List[ValidationIssue]]
>>>
>>> Note the "setFilter"  This is applied to both setting the field  
>>> and for any queries related to the field. This means that the  
>>> rules for transformation are well known and visible to other parts  
>>> of the application.  The same for the validations.
>>>
>>
>> The filter is for the form to the mapped field. Why should queries   
>> (or anything) need to know this transformation.
>> Isn't there a corresponding filter from the mapped field to the  
>> form (e.g null -> "")
>>
>> It's not a filter, but there is a toForm method on each MappedField  
>> which does the translation of the field into an XHTML form.
>>
>>
>>> This keeps the validation (and mutation-on-set) logic with the  
>>> field.
>>>
>>
>> Single field validations are being talked about, but what about  
>> validations that cover multiple fields - should a validator  
>> framework handle both?
>>
>> They do.  First, the field-level validators can access other fields  
>> in the record.
>>
>> What about simple multiple field
>> validations like dates (day month year) - should these be handled  
>> as a special case?
>>
>> Why?  They fit right into the existing mechanism.
>>
> You respond as though the existing validation mechanism is  
> sufficient (and documented).
>
> With the exception of the client-side validation being unified, I  
> have not heard a single use case for validation that is not handled  
> by the existing mechanism.  If you've got a use case that isn't  
> being handled, please let me know.  So, yes, after building 30+  
> commercial web sites over the last 12 years and developing 3 major  
> web frameworks, I am pretty confident that the existing mechanism  
> covers validation for every project I've worked on.
>
Good

> On a broader note, it's clear that Lift lacks documentation.  There  
> are a number of us who are huddled working on a plan for  
> documentation, but like everything else, commitments are required in  
> order to turn a project from a desire into reality.  In the mean  
> time, the best that the Lift committers and others in the community  
> can do is answer questions and explain design decisions.
>
 From what I have read in various threads, others (not just me) have  
been discussing validation without understanding what Lift has in place.

>
>
>>
>>
>>
>>
>>
>
>
>
>
>
>
>
> -- 
> Lift, the simply functional web framework http://liftweb.net
> Collaborative Task Management http://much4.us
> Follow me: http://twitter.com/dpp
> Git some: http://github.com/dpp
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to