[racket] Stateless servlets and formlets error

From: Lorenz Köhl (rainbowtwigs at gmail.com)
Date: Wed Feb 6 02:13:37 EST 2013

The following servlet show an input field from a formlet and then tries to use formlet-process on the resulting request. I don't understand why this fails when, like below, the send/suspend and formlet-process is in a function but works when inlined, like the #; commented code in handle-html-form.

The error is

stuff-url: Cannot stuff (kont #<procedure:...abort-resume.rkt:154:25>) into a URL because it contains non-serializable pieces. Convert #<procedure:...formlets/lib.rkt:17:2> to a serializable struct

Why does the extra lambda lead to this error message?


#lang web-server
(provide handle-html-form
     interface-version)
(define interface-version 'stateless)
(require web-server/formlets web-server/servlet-env)

(define main-input-formlet
(formlet
(#%# ,[(to-string (required (text-input))) . => . text])
text))

(define (send/form2 f)
(formlet-process f
               (send/suspend
                (lambda (k-url)
                  (response/xexpr
                   `(form ([action ,k-url] [method "POST"])
                          ,@(formlet-display f)))))))

(define (handle-html-form req)
(define user-input
(send/form2 main-input-formlet)
#;(formlet-process
 main-input-formlet
 (send/suspend
  (lambda (k-url)
    (response/xexpr
     `(form ([action ,k-url] [method "POST"])
            ,@(formlet-display main-input-formlet)))))))
(displayln user-input))

(serve/servlet handle-html-form #:stateless? #t)

Posted on the users mailing list.