Adam Thorsen
2006-03-29 16:23:43 UTC
I'm using TBNL in a small web-app. A common need when developing webapps is
to display a form with fields pre-populated from the database (i.e. email
address, street address, etc.).
I'm wondering if it's possible to do this with cl-who in some generic way?
I thought perhaps I could customize cl-who using the
convert-tag-to-string-list method. The function below overrides default
handling of (:input) tags to look for a :tuple attribute with a value set to
a hash containing the values from the database needed to pre-fill the form
the input element is part of. This approach doesn't work, however, because
convert-tag-to-string serializes the string at compile time, and the data
needs to be retrieved from the database at run time. Any ideas?
(defmethod convert-tag-to-string-list ((tag (eql :input)) attr-list body
body-fn)
;;(declare (ignore attr-list))
(let ((name (cdr (assoc :name attr-list)))
(type (cdr (assoc :type attr-list)))
(tuple (eval (cdr (assoc :tuple attr-list)))))
(nconc (cons (format nil "<input name='~a' type='~a' value='~a'>"
name type (if tuple
(gethash name tuple)
""))
(funcall body-fn body)) (list "</input>"))))
Thanks,
-Adam Thorsen
to display a form with fields pre-populated from the database (i.e. email
address, street address, etc.).
I'm wondering if it's possible to do this with cl-who in some generic way?
I thought perhaps I could customize cl-who using the
convert-tag-to-string-list method. The function below overrides default
handling of (:input) tags to look for a :tuple attribute with a value set to
a hash containing the values from the database needed to pre-fill the form
the input element is part of. This approach doesn't work, however, because
convert-tag-to-string serializes the string at compile time, and the data
needs to be retrieved from the database at run time. Any ideas?
(defmethod convert-tag-to-string-list ((tag (eql :input)) attr-list body
body-fn)
;;(declare (ignore attr-list))
(let ((name (cdr (assoc :name attr-list)))
(type (cdr (assoc :type attr-list)))
(tuple (eval (cdr (assoc :tuple attr-list)))))
(nconc (cons (format nil "<input name='~a' type='~a' value='~a'>"
name type (if tuple
(gethash name tuple)
""))
(funcall body-fn body)) (list "</input>"))))
Thanks,
-Adam Thorsen