Thanks Jan, that worked for me (mostly). Leslie, I see what you are saying about how it might be hacky to not be using a presentation/ parser, but it feels even more hacky to me to be conflating a lot of fields into a single presentation. In the case of the dual password, it seems fine to have a presentation that displays it as such, but what if I want to add a captcha to my registration view? The captcha doesn't have a corresponding slot in the model, but it would be used by my :satisfies function to make sure the registration is valid. I guess I don't see how by just creating a new presentation I could do this properly (i.e. which slot on the model does it make the most sense do add the captcha field on to?). Jan's approach makes more sense to me here, but just wondering what your thoughts are.
Jan, the reason I say mostly above is that I have now run into a different problem. I no longer get the error I was getting earlier (or any error for that matter), but my object is simply not getting created in the database. The code I have right now is: http://paste.lisp.org/display/76043 . I have been able to create things in the database before (before this I had an :on-success method defined on my registration view that was writing out clsql syntax to create the user, and that was working), so I don't believe it's a connection issue. I realize that this is probably difficult for any of you to actually debug, just wondering if anyone has seen a problem like this before or if there is something obvious I am not doing. Additionally, I have another form where I have a view mapped to a model that has float and integer fields. Whenever I tried to submit this form, however, I would get an error on all the integer and float fields saying that the value is invalid (even if I put in a number value into the field). I saw on another (old) post that the only way to make this work was to define a float/integer type and write a parser for the type. I managed to get around it for now by defining a writer on each of those fields that just assigns the value to the slot of the model, but this seems a bit hacky (maybe not - just seems like it should be done more automatically). Is the proper way to do this still to define parsers for float/integer types? Thanks a lot for all your help! -Saikat On Feb 23, 2:06 am, Jan Rychter <[email protected]> wrote: > Saikat Chakrabarti <[email protected]> writes: > > I am trying to create a user registration form that has a "Retype > > Password" field in the view (which does not map to the model's slot). > > I would like to use the built in functionality in Weblocks to create a > > new user through this registration form (without defining my own > > method for on-success and writing my own CLSQL, if possible). > > Here's what I do, it uses the form-level validator support that I > implemented in Weblocks a long time ago and :reader/:writer view > arguments: > > (defview user-registration-form (:type form > [...] > :satisfies > (lambda (&key password password2 > &allow-other-keys) > (if (string-equal password password2) > t > (values nil "Passwords do not > match.")))) > (password :present-as (password :max-length 128) :label "Password" > :writer (lambda (pwd obj) > (setf (slot-value obj 'password) > (hash-password pwd))) > :requiredp t) > (password2 :present-as (password :max-length 128) :label "Password (again)" > :reader (lambda (&rest args) (declare (ignore args)) "") > :writer (lambda (&rest args) (declare (ignore args))) > :requiredp t) > > The 'user' data object only has a 'password' field, of course. > > --J. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "weblocks" 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/weblocks?hl=en -~----------~----~----~----~------~----~------~--~---
