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 @(require (for-label web-server/servlet/web
web-server/servlet/servlet-structs web-server/servlet/servlet-structs
web-server/http web-server/http
racket/list
net/url)) net/url))
@defmodule[web-server/servlet/web]{The @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?]{ 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. 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. 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?]{ 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)]{ @defthing[current-servlet-continuation-expiration-handler (parameter/c expiration-handler/c)]{

View File

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