[plt-scheme] web-server and templates
--- Jordan Johnson mumbled on 2004-08-14 12.59.55 -0700 ---
> While I'm at it (and this is definitely more of a CGI question, but
> related--pardon me): if I want to determine which URL or form data to use
> based on a single click--and *don't* want to use a form submit button--is
> this the only way:
> `(a ((href ,(string-append url "?arg=suchandsuch"))) "click here")
> ?
What you seem to want is `send/suspend/dispatch'. It will be part of a
future release of the PLT Web server. Until then, I've been using this:
;; send/suspend/dispatch : Response -> void
(define (send/suspend/dispatch p-exp)
(let/cc k0
(send/back
(replace-procedures
p-exp (lambda (proc)
(let/cc k1 (k0 (proc (send/suspend k1)))))))))
(define (replace-procedures p-exp p->a)
(cond
((list? p-exp) (map (lambda (p-e) (replace-procedures p-e p->a))
p-exp))
((procedure? p-exp) (p->a p-exp))
(else p-exp)))
And a very simple example use is:
(define (callback req)
`(html (head (title "Page Two"))
(body (h1 "Page Two"))))
(send/suspend/dispatch
`(html (head (title "Page One"))
(body (h1 "Page One")
(p (a ((href ,callback)) "Page Two")))))
--
Mike Burns netgeek at speakeasy.net http://netgeek.ws