исключение: текущие метки продолжения: нет соответствующей подсказки в продолжении: # - PullRequest
0 голосов
/ 30 сентября 2011

почему я получаю исключение (перенаправление / получение) в этой программе

#lang web-server
(require web-server/formlets web-server/page) (struct app (nm) #:mutable)
(define (start req) (render-main-page req))

эта функция должна использоваться большинством страниц и генерирует завершенную страницу xexpr, вызывая каждый данный фрагмент функций генератора страниц, каждая из которых может вставлять свои URL-адреса

(define (render-page embed/url a-title blocks)
     (response/xexpr `(html (head (title ,a-title) 
         (body ,@(map (lambda (block) (block embed/url)) blocks))))))

это часть функции генератора первой страницы

(define (render-action-panel embed/url action)
  `(a ([href ,(embed/url action)]) "New"))

это первая страница

(define/page (render-main-page)
  (local [(define (new-handler req) (render-app-page req (app "new value")))
          (define (panel-block embed/url) (render-action-panel embed/url new-handler))]            
    (render-page embed/url "Title" (list panel-block))))  

это часть функции генератора второй страницы (представляет форму)

(define (add-app-formlet an-app) (formlet (#%# ,{=> input-string nm}) nm))
(define (render-app-form embed/url an-app save-handler)
  `(div (form ([action ,(embed/url save-handler)][method "POST"])
              (span ,@(formlet-display (add-app-formlet an-app) ))
              (span (input ([type "submit"][value "Save"]))))));)

вторая форма, обработчик сохранения выдает исключение при попытке сделать post-redirect-get

(define/page (render-app-page an-app)
  (local [(define (save-handler req)
            (render-app-page 
             (redirect/get) 
             (set-app-nm! an-app (formlet-process (add-app-formlet an-app) req))))
          (define (form-block embed/url)
            (render-app-form embed/url an-app save-handler ))
          ]
    (render-page embed/url "Title - form: " (list form-block))))

(require web-server/servlet-env)
(serve/servlet start)

1 Ответ

1 голос
/ 30 сентября 2011

Какой redirect/get вы используете?

Значение из web-server/lang/servlet (которое следует использовать с #lang web-server) отличается от значения из web-server/servlet (которое следует использовать с #lang racket (и друзья))

Это сообщение об ошибке означает, что вы используете сообщение из web-server/servlet.

FWIW, web-server/page нельзя использовать с #lang web-server, потому что это простопростой макрос над send/suspend/dispatch из web-server/servlet.

...