Thanks, that helps a lot. My one question is: where would I put the loginValiditor javascript? I've successfully avoided having to use javascript up to this point. Do I simply register the .js file in the sitemap as a resource?
Thanks, JF --- Leszek Gawron <[EMAIL PROTECTED]> wrote: > footh wrote: > > I know I probably could find the answer to this > > question by going through docs and samples, but > I've > > been through that so much in the past couple weeks > > that I was hoping I could play my "get out of jail > > free" card. > > > > I have a form that registers a user. Field > validation > > can be done easily on the client side. But, in > the > > case that I must check whether the user tries to > > register a name that already exists, I need to hit > my > > user database and then return to the form if an > error > > occurs. > > > > Basically, I bind my form to a bean, call > form.load, > > call form.show to show the form, call form.save to > > load the request data into the bean, then check if > the > > user already exists. > > 1. You do not have to call form.save( bean ) and do > validation after. > What I do is to plug additional javascript validator > and validate the > data BEFORE I do form.save: > > <fd:form > xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" > xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> > <fd:validation> > <fd:javascript> > return loginValidator( widget ); > </fd:javascript> > </fd:validation> > <fd:widgets> > <fd:messages id="messages"> > <fd:label>messages</fd:label> > </fd:messages> > <fd:field id="username" required="true"> > <fd:datatype base="string"/> > <fd:label>Username</fd:label> > </fd:field> > <fd:field id="password" required="true"> > <fd:datatype base="string"/> > <fd:label>Password</fd:label> > </fd:field> > <fd:booleanfield id="remember" required="false"> > <fd:label>rememberme</fd:label> > </fd:booleanfield> > <fd:submit id="finish" command="finish" > validate="true"> > <fd:label>Log in</fd:label> > </fd:submit> > </fd:widgets> > </fd:form> > > you can have your business logic called directly in > <fd:javascript> but > I consider it good practice to call a flowscript > function here. As you > see you can access "widget" variable which in this > case is the whole form. > > function loginValidator( form ) { > var username = form.getChild( "username" > ).getValue(); > var pass = form.getChild( "password" ).getValue(); > > var user = validateLoginData( username, pass ); > if ( user == null ) { > form.getChild( "messages" ).addMessage( "Bad > credentials!" ); > return false; > } > > cocoon.session.setAttribute( "user", user ); > > if ( form.getChild( "rememberme" ).getValue() == > java.lang.Boolean.TRUE ) { > storeLoginCookies( user.username, user.password ); > } > return true; > } > > Your javascript validator should return false if > validation failed. Any > additional messages are registered at "messages" > widget. Please mind > that widget is not "persistent" - you do not have to > clear the messages, > they will be shown only once. > > > > > If the user does already exist, then I obviously > need > > to start over again and display that error (and > > display the fields they already entered). > > > > Might anyone be able to point me in the right > > direction of how to accomplish this with CForms? > Do I > > simply call form.show again? How do I insert this > > error into the validation errors framework? > > If you want more fine grained error display you can > always do: > > form.getChild( "username" ).setValidationError( > new ValidationError( "Username already taken." > ) ); > > or even better: > form.getChild( "username" ).setValidationError( > new ValidationError( "username.taken", true ) > ); > for i18n-enabled form. > > HTH > -- > Leszek Gawron > [EMAIL PROTECTED] > IT Manager > MobileBox sp. z o.o. > +48 (61) 855 06 67 > http://www.mobilebox.pl > mobile: +48 (501) 720 812 fax: > +48 (61) 853 29 65 > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > > ____________________________________________________ Start your day with Yahoo! - make it your home page http://www.yahoo.com/r/hs --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
