2010-10-05 21 views
8

Compojure ne lie pas les champs dans un formulaire POST. Ceci est ma définition d'itinéraire:Compojure lie les paramètres de requête HTTP à partir de l'URL, mais pas à partir d'un formulaire POST

(defroutes main-routes 
    (POST "/query" {params :params} 
    (debug (str "|" params "|")) 
    "OK...") 
) 

Lorsque je poste un formulaire avec des champs en elle, je reçois | {} |, à savoir qu'il n'y a pas de paramètres. Incidemment, quand je vais http://localhost/query?param1=value1, params n'est pas vide, et les valeurs sont imprimées sur la console du serveur.

Existe-t-il une autre liaison pour les champs de formulaire?

Répondre

13

Assurez-vous d'avoir des champs de saisie avec l'attribut name = "zzz", mais pas seulement id = "zzz".

forme html rassemble toutes les entrées et les messages qui les utilisent l'attribut name

my_post.html

<form action="my_post_route" method="post"> 
    <label for="id">id</label> <input type="text" name="id" id="id" /> 
    <label for="aaaa">aaa</label> <input type="text" name="aaa" id="aaa" /> 
    <button type="submit">send</button> 
</form> 

my_routes.clj

(defroutes default-handler 
    ;,,,, 
    (POST "/my_post_route" {params :params} 
    (str "POST id=" (params "id") " params=" params)) 
    ;,,,, 

réponse comme produit

id = 21 params = {"aaa" "aoeu", "Id" "21"}

3

Ceci est un excellent exemple de la façon de gérer les paramètres

(ns example2 
    (:use [ring.adapter.jetty    :only [run-jetty]] 
    [compojure.core     :only [defroutes GET POST]] 
    [ring.middleware.params   :only [wrap-params]])) 

(defroutes routes 
    (POST "/" [name] (str "Thanks " name)) 
    (GET "/" [] "<form method='post' action='/'> What's your name? <input type='text' name='name' /><input type='submit' /></form>")) 

(def app (wrap-params routes)) 

(run-jetty app {:port 8080}) 

https://github.com/heow/compojure-cookies-example

Voir à l'exemple 2 - Middleware est Caractéristiques