[hunchentoot-devel] Custom types for easy handler.
    timothy 
    tschaef at sbcglobal.net
       
    Fri Jun  1 03:55:03 UTC 2007
    
    
  
Le mercredi 30 mai 2007 à 09:35 +0200, Edi Weitz a écrit :
> Hi,
> 
> sorry for the delay.
> 
> On Fri, 25 May 2007 06:47:57 -0700 (PDT), Timothy Schaeffer <tschaef at sbcglobal.net> wrote:
> 
> > I propose that the types for easy-handlers be extensible by the
> > users.  I have pieces of markup which are used throughout our site
> > which collect information from several fields into a class (in our
> > case tied to a database with clsql).  The names of the fields are
> > related, but diffierent from the lists, arrays and hashes of the
> > easy-handlers, Dates and addresses are two good examples, but there
> > are others.  I would like to be able to teach the easy handler to
> > collect these for me and pass them as parameters.  This cannot be
> > done with functions as the :parameter-type because the functions
> > passed as :parameter-type do not take the parameter name.
> 
> I don't really understand what you're trying to do that can't be done
> with REAL-NAME and a function designator for PARAMETER-TYPE.  Maybe
> you can provide an example?
Voici a simple example of what I'm doing:
(defun form-date-input (&key name (label "Date") value (required nil))
.... 
   (with-html-output-to-string (s nil :indent t)
   ... a bunch of input fields for getting a date in pieces, whose id
attr is based on the name paramater...  
))
;; A function to collect date pieces from fields in markup produced 
;; by form-date-input.  parm-name must be the same as given in the
;; name parameter in form-date-input.
(defun date-parameter (parm-name)
  (flet ((parm (item)
	   (non-negative-integer-parameter ; guess what this does :)
		(conc parm-name "-date-" (string-downcase (to-string item))))))
    (let ((yyyy (parm  'year))
	  (mm (parm 'month))
	  (dd (parm 'day)))
      (ignore-errors
	(clsql-sys::parse-datestring
	 (format nil "~4,'0D-~2,'0D-~2,'0D" yyyy  mm  dd))))))
The function passed as :parameter-type takes only the parameter value as
a string (right?), so I cannot do this there; I'm really collecting
several fields into one value.
> I'd say that if it can't be done, then your task is probably too
> complicated for an "easy" handler, but maybe I'm missing something.
> The idea of DEFINE-EASY-HANDLER is that it is a convenience macro for
> 90% of the handlers one usually writes - the mundane ones.  It was not
> intended as a general purpose tool for every conceivable Hunchentoot
> handler on Earth.
Understood.  I may have had a bit too much coffee.  And some part of me
doesn't like seeing a hardcoded list of types.  Ars longa.
Maybe I'll roll my own, define-hairy-wart-covered-handler maybe.
I still think letting :request-type be a custom getter is a good idea
though; it is an easy change and be consistent with the
way :parameter-type works.
> > Hunchentoot is a pleasure to work with!
> That's good to know... :)
It's good to be true [-)
Tim S
    
    
More information about the Tbnl-devel
mailing list