Exposing redirect-to arg in redirect/get*

This commit is contained in:
Jay McCarthy 2010-06-26 13:05:27 -06:00
parent 6e1e6660c4
commit 22b39b44d1
2 changed files with 9 additions and 9 deletions

View File

@ -5,6 +5,7 @@
@(require (for-label web-server/servlet/web
web-server/servlet/servlet-structs
web-server/http
racket/list
net/url))
@defmodule[web-server/servlet/web]{The
@ -141,17 +142,17 @@ functions of interest for the servlet developer.
]
}
@defproc[(redirect/get)
@defproc[(redirect/get [#:headers hs (listof header?) empty])
request?]{
Calls @racket[send/suspend] with @racket[redirect-to].
Calls @racket[send/suspend] with @racket[redirect-to], passing @racket[hs] as the headers.
This implements the Post-Redirect-Get pattern.
Use this to prevent the @onscreen["Refresh"] button from duplicating effects, such as adding items to a database.
}
@defproc[(redirect/get/forget)
@defproc[(redirect/get/forget [#:headers hs (listof header?) empty])
request?]{
Calls @racket[send/forward] with @racket[redirect-to].
Calls @racket[send/forward] with @racket[redirect-to], passing @racket[hs] as the headers.
}
@defthing[current-servlet-continuation-expiration-handler (parameter/c expiration-handler/c)]{

View File

@ -36,8 +36,8 @@
(provide/contract
[current-servlet-continuation-expiration-handler (parameter/c expiration-handler/c)]
[redirect/get (-> request?)]
[redirect/get/forget (-> request?)]
[redirect/get (() (#:headers (listof header?)) . ->* . request?)]
[redirect/get/forget (() (#:headers (listof header?)) . ->* . request?)]
[adjust-timeout! (number? . -> . void?)]
[clear-continuation-table! (-> void?)]
[send/back (response/c . -> . void?)]
@ -139,14 +139,13 @@
;; ************************************************************
;; HIGHER-LEVEL EXPORTS
(define ((make-redirect/get send/suspend))
(send/suspend (lambda (k-url) (redirect-to k-url temporarily))))
(define ((make-redirect/get send/suspend) #:headers [hs empty])
(send/suspend (lambda (k-url) (redirect-to k-url temporarily #:headers hs))))
; redirect/get : -> request
(define redirect/get (make-redirect/get send/suspend))
(define redirect/get/forget (make-redirect/get send/forward))
(define (with-errors-to-browser send/finish-or-back thunk)
(with-handlers ([exn:fail? (lambda (exn)
(send/finish-or-back